view downloads/management/commands/dlwgetcat.py @ 861:e4f8d87c3d30

Configure Markdown logger to reduce noise in logs. Markdown is logging at the INFO level whenever it loads an extension. This looks like it has been fixed in master at GitHub. But until then we will explicitly configure the MARKDOWN logger to log at WARNING or higher.
author Brian Neal <bgneal@gmail.com>
date Mon, 01 Dec 2014 18:36:27 -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'))