Files @ 46a10b9e3ae6
Branch filter:

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

Patrick Altman
Merge pull request #107 from miurahr/gen_str_name_when_save

slot: generate __unicode__ name when save()
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"))