Mercurial > public > sg101
view downloads/management/commands/dlwgetcat.py @ 697:67f8d49a9377
Cleaned up the code a bit.
Separated the S3 stuff out into its own class.
This class maybe should be in core.
Still want to do some kind of context manager around the temporary file we are
creating to ensure it gets deleted.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Sun, 08 Sep 2013 21:02:58 -0500 |
parents | a75554eb6bae |
children | b59c154d0163 |
line wrap: on
line source
""" dlwgetcat - a management command to produce a bash script that wgets all the files in a given category. """ import os.path from django.core.management.base import LabelCommand, CommandError from django.template.loader import render_to_string from django.utils.text import slugify from django.contrib.sites.models import Site from django.conf import settings from downloads.models import Category, Download class Command(LabelCommand): help = ("Produce on standard output a bash script that wgets all the files" " in a category. The files are downloaded with a slugified name.") args = "category-slug" def handle_label(self, slug, **options): """ Render a template using the downloads in a given category and send it to stdout. """ try: category = Category.objects.get(slug=slug) except Category.DoesNotExist: raise CommandError("category slug '%s' does not exist" % slug) downloads = Download.public_objects.filter(category=category).order_by( 'title').select_related() # Create new destination names for the files since the uploaders often # give the files terrible names. The new names will be slugified # versions of the titles, with the same extension. for dl in downloads: ext = os.path.splitext(dl.file.name)[1] dl.dest_filename = slugify(dl.title) + ext output = render_to_string('downloads/commands/wget_cat.html', { 'downloads': downloads, 'domain': Site.objects.get_current().domain, 'MEDIA_URL': settings.MEDIA_URL, }) # encode it ourselves since it can fail if you try to redirect output to # a file and any of the content is not ASCII... self.stdout.write(output.encode('utf-8'))