annotate ygroup/management/commands/sync_ygroup_posts.py @ 581:ee87ea74d46b

For Django 1.4, rearranged project structure for new manage.py.
author Brian Neal <bgneal@gmail.com>
date Sat, 05 May 2012 17:10:48 -0500
parents gpp/ygroup/management/commands/sync_ygroup_posts.py@0c18dfb1da1c
children
rev   line source
bgneal@323 1 """
bgneal@323 2 sync_ygroup_posts.py - A management command to synchronize the yahoo group
bgneal@323 3 archives by recomputing the de-normalized fields in the post objects.
bgneal@323 4
bgneal@323 5 """
bgneal@323 6 import optparse
bgneal@323 7
bgneal@323 8 from django.core.management.base import NoArgsCommand, CommandError
bgneal@323 9 from django.core.urlresolvers import reverse
bgneal@323 10
bgneal@323 11 from ygroup.models import Thread, Post
bgneal@323 12 import ygroup.views
bgneal@323 13
bgneal@323 14
bgneal@323 15 class Command(NoArgsCommand):
bgneal@323 16 help = """\
bgneal@323 17 This command synchronizes the ygroup application's post objects
bgneal@323 18 by updating their de-normalized fields.
bgneal@323 19 """
bgneal@323 20 option_list = NoArgsCommand.option_list + (
bgneal@323 21 optparse.make_option("-p", "--progress", action="store_true",
bgneal@323 22 help="Output a . after every 100 posts to show progress"),
bgneal@323 23 )
bgneal@323 24
bgneal@323 25 def handle_noargs(self, **opts):
bgneal@323 26
bgneal@323 27 show_progress = opts.get('progress', False) or False
bgneal@323 28
bgneal@323 29 threads = {}
bgneal@323 30 self.stdout.write("Processing threads...\n")
bgneal@323 31 for thread in Thread.objects.iterator():
bgneal@323 32 threads[thread.id] = [reverse('ygroup-thread_view', args=[thread.id]),
bgneal@323 33 list(Post.objects.filter(thread=thread).values_list('id', flat=True))]
bgneal@323 34
bgneal@323 35 self.stdout.write("Processing posts...\n")
bgneal@323 36 n = 0
bgneal@323 37 for post in Post.objects.iterator():
bgneal@323 38 thread = threads[post.thread.id]
bgneal@323 39 pos = thread[1].index(post.id)
bgneal@323 40 page = pos / ygroup.views.POSTS_PER_PAGE + 1
bgneal@323 41 if page == 1:
bgneal@323 42 post.thread_url = thread[0] + '#p%d' % (post.id, )
bgneal@323 43 else:
bgneal@323 44 post.thread_url = thread[0] + '?page=%d#p%d' % (page, post.id)
bgneal@323 45 post.save()
bgneal@323 46
bgneal@323 47 n += 1
bgneal@323 48 if show_progress and n % 100 == 0:
bgneal@323 49 self.stdout.write('.')
bgneal@323 50 self.stdout.flush()
bgneal@323 51
bgneal@323 52 self.stdout.write('\n')
bgneal@323 53