Files @ f7caf1435737
Branch filter:

Location: symposion_app/symposion/sponsorship/management/commands/export_sponsors_data.py

Patrick Altman
Merge pull request #85 from miurahr/export_sponsor_zip

Enhanced sponsorship: export files
import csv
import os
import shutil
import zipfile

from contextlib import closing

from django.core.management.base import BaseCommand
from django.template.defaultfilters import slugify

from sotmjp.sponsorship.models import Sponsor


def zipdir(basedir, archivename):
    assert os.path.isdir(basedir)
    with closing(zipfile.ZipFile(archivename, "w", zipfile.ZIP_DEFLATED)) as z:
        for root, dirs, files in os.walk(basedir):
            #NOTE: ignore empty directories
            for fn in files:
                absfn = os.path.join(root, fn)
                zfn = absfn[len(basedir) + len(os.sep):]     # XXX: relative path
                z.write(absfn, zfn)


class Command(BaseCommand):

    def handle(self, *args, **options):
        try:
            os.makedirs(os.path.join(os.getcwd(), "build"))
        except:
            pass

        csv_file = csv.writer(
            open(os.path.join(os.getcwd(), "build", "sponsors.csv"), "wb")
        )
        csv_file.writerow(["Name", "URL", "Level", "Description"])

        for sponsor in Sponsor.objects.all():
            path = os.path.join(os.getcwd(), "build", slugify(sponsor.name))
            try:
                os.makedirs(path)
            except:
                pass

            data = {
                "name": sponsor.name,
                "url": sponsor.external_url,
                "level": sponsor.level.name,
                "description": "",
            }
            for sponsor_benefit in sponsor.sponsor_benefits.all():
                if sponsor_benefit.benefit_id == 2:
                    data["description"] = sponsor_benefit.text
                if sponsor_benefit.benefit_id == 1:
                    if sponsor_benefit.upload:
                        data["ad"] = sponsor_benefit.upload.path
                if sponsor_benefit.benefit_id == 7:
                    if sponsor_benefit.upload:
                        data["logo"] = sponsor_benefit.upload.path

            if "ad" in data:
                ad_path = data.pop("ad")
                shutil.copy(ad_path, path)
            if "logo" in data:
                logo_path = data.pop("logo")
                shutil.copy(logo_path, path)

            csv_file.writerow([
                data["name"].encode("utf-8"),
                data["url"].encode("utf-8"),
                data["level"].encode("utf-8"),
                data["description"].encode("utf-8")
            ])

        zipdir(
            os.path.join(os.getcwd(), "build"),
            os.path.join(os.getcwd(), "sponsors.zip"))