bgneal@323: """ bgneal@323: sync_ygroup_posts.py - A management command to synchronize the yahoo group bgneal@323: archives by recomputing the de-normalized fields in the post objects. bgneal@323: bgneal@323: """ bgneal@323: import optparse bgneal@323: bgneal@323: from django.core.management.base import NoArgsCommand, CommandError bgneal@323: from django.core.urlresolvers import reverse bgneal@323: bgneal@323: from ygroup.models import Thread, Post bgneal@323: import ygroup.views bgneal@323: bgneal@323: bgneal@323: class Command(NoArgsCommand): bgneal@323: help = """\ bgneal@323: This command synchronizes the ygroup application's post objects bgneal@323: by updating their de-normalized fields. bgneal@323: """ bgneal@323: option_list = NoArgsCommand.option_list + ( bgneal@323: optparse.make_option("-p", "--progress", action="store_true", bgneal@323: help="Output a . after every 100 posts to show progress"), bgneal@323: ) bgneal@323: bgneal@323: def handle_noargs(self, **opts): bgneal@323: bgneal@323: show_progress = opts.get('progress', False) or False bgneal@323: bgneal@323: threads = {} bgneal@323: self.stdout.write("Processing threads...\n") bgneal@323: for thread in Thread.objects.iterator(): bgneal@323: threads[thread.id] = [reverse('ygroup-thread_view', args=[thread.id]), bgneal@323: list(Post.objects.filter(thread=thread).values_list('id', flat=True))] bgneal@323: bgneal@323: self.stdout.write("Processing posts...\n") bgneal@323: n = 0 bgneal@323: for post in Post.objects.iterator(): bgneal@323: thread = threads[post.thread.id] bgneal@323: pos = thread[1].index(post.id) bgneal@323: page = pos / ygroup.views.POSTS_PER_PAGE + 1 bgneal@323: if page == 1: bgneal@323: post.thread_url = thread[0] + '#p%d' % (post.id, ) bgneal@323: else: bgneal@323: post.thread_url = thread[0] + '?page=%d#p%d' % (page, post.id) bgneal@323: post.save() bgneal@323: bgneal@323: n += 1 bgneal@323: if show_progress and n % 100 == 0: bgneal@323: self.stdout.write('.') bgneal@323: self.stdout.flush() bgneal@323: bgneal@323: self.stdout.write('\n') bgneal@323: