Mercurial > public > sg101
view downloads/management/commands/dlwgetcat.py @ 862:22a2362a8c9a
Merge with upstream.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Mon, 01 Dec 2014 18:39:40 -0600 |
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'))