annotate downloads/management/commands/dlcatreport.py @ 917:0365fdbb4d78

Fix app conflict with messages. Django's messages app label conflicts with our messages app. We can't easily rename our label as that will make us rename database tables. Since our app came first we'll just customize Django messages label. For Django 1.7.7 upgrade.
author Brian Neal <bgneal@gmail.com>
date Mon, 06 Apr 2015 20:02:25 -0500
parents b59c154d0163
children cb712b2c34af
rev   line source
bgneal@527 1 """
bgneal@527 2 dlcatreport - a management command to produce a HTML report of all the downloads
bgneal@527 3 in a given category.
bgneal@527 4
bgneal@527 5 """
bgneal@634 6 from optparse import make_option
bgneal@634 7
bgneal@527 8 from django.core.management.base import LabelCommand, CommandError
bgneal@527 9 from django.template.loader import render_to_string
bgneal@527 10
bgneal@527 11 from downloads.models import Category, Download
bgneal@527 12
bgneal@527 13
bgneal@527 14 class Command(LabelCommand):
bgneal@527 15 help = "Produce on standard output a report of all downloads in a category."
bgneal@527 16 args = "category-slug"
bgneal@527 17
bgneal@634 18 option_list = LabelCommand.option_list + (
bgneal@634 19 make_option('--titles-only',
bgneal@634 20 action='store_true',
bgneal@634 21 default=False,
bgneal@634 22 help='Output a text listing of titles only'),
bgneal@634 23 )
bgneal@634 24
bgneal@527 25 def handle_label(self, slug, **options):
bgneal@527 26 """
bgneal@527 27 Render a template using the downloads in a given category and send it to
bgneal@527 28 stdout.
bgneal@527 29
bgneal@527 30 """
bgneal@527 31 try:
bgneal@527 32 category = Category.objects.get(slug=slug)
bgneal@527 33 except Category.DoesNotExist:
bgneal@527 34 raise CommandError("category slug '%s' does not exist" % slug)
bgneal@527 35
bgneal@527 36 downloads = Download.public_objects.filter(category=category).order_by(
bgneal@527 37 'title').select_related()
bgneal@527 38
bgneal@634 39 if options.get('titles_only'):
bgneal@684 40 self.print_titles(downloads)
bgneal@634 41 return
bgneal@634 42
bgneal@527 43 report = render_to_string('downloads/commands/category_report.html', {
bgneal@527 44 'category': category,
bgneal@527 45 'downloads': downloads,
bgneal@527 46 })
bgneal@527 47
bgneal@874 48 self.stdout.write(report)
bgneal@527 49
bgneal@684 50 def print_titles(self, dls):
bgneal@684 51 """Print out the download titles"""
bgneal@684 52
bgneal@684 53 for dl in dls:
bgneal@874 54 self.stdout.write(dl.title)
bgneal@684 55
bgneal@684 56