annotate gpp/forums/management/commands/sync_forums.py @ 322:c3d3d7114749

Fix #148; Django now requires AJAX posts to present the CSRF token. Added code suggested by Django docs to shoutbox.js. Since shoutbox.js is on every page, it should cover all cases.
author Brian Neal <bgneal@gmail.com>
date Sat, 12 Feb 2011 21:37:17 +0000
parents 254db4cb6a86
children
rev   line source
bgneal@294 1 """
bgneal@294 2 sync_forums.py - A management command to synchronize the forums by recomputing
bgneal@294 3 the de-normalized fields in the forum and topic objects.
bgneal@294 4
bgneal@294 5 """
bgneal@294 6 import optparse
bgneal@294 7
bgneal@294 8 from django.core.management.base import NoArgsCommand, CommandError
bgneal@294 9
bgneal@294 10 from forums.models import Forum
bgneal@294 11 from forums.models import Topic
bgneal@294 12
bgneal@294 13
bgneal@294 14 class Command(NoArgsCommand):
bgneal@294 15 help = """\
bgneal@294 16 This command synchronizes the forum application's forums and topic objects
bgneal@294 17 by updating their de-normalized fields.
bgneal@294 18 """
bgneal@294 19 option_list = NoArgsCommand.option_list + (
bgneal@294 20 optparse.make_option("-p", "--progress", action="store_true",
bgneal@294 21 help="Output a . after every 50 topics to show progress"),
bgneal@294 22 )
bgneal@294 23
bgneal@294 24 def handle_noargs(self, **opts):
bgneal@294 25
bgneal@294 26 show_progress = opts.get('progress', False) or False
bgneal@294 27
bgneal@294 28 n = 0
bgneal@294 29 for topic in Topic.objects.iterator():
bgneal@294 30 topic.post_count_update()
bgneal@294 31 topic.save()
bgneal@294 32 n += 1
bgneal@294 33 if n % 50 == 0:
bgneal@294 34 self.stdout.write('.')
bgneal@294 35 self.stdout.flush()
bgneal@294 36
bgneal@294 37 for forum in Forum.objects.all():
bgneal@294 38 forum.sync()
bgneal@294 39 forum.save()
bgneal@294 40
bgneal@294 41 self.stdout.write('\n')
bgneal@294 42