view gpp/forums/management/commands/sync_forums.py @ 388:c3231af55778

For #191; r410 is wrong: it is returning the wrong posts. Rework. MySQL is not using an index on our query, and it is taking 10+ seconds. Replace this slow query with a loop that loops over the public forums, then sorts and returns the posts.
author Brian Neal <bgneal@gmail.com>
date Sat, 19 Mar 2011 05:03:51 +0000
parents 254db4cb6a86
children
line wrap: on
line source
"""
sync_forums.py - A management command to synchronize the forums by recomputing
the de-normalized fields in the forum and topic objects.

"""
import optparse

from django.core.management.base import NoArgsCommand, CommandError

from forums.models import Forum
from forums.models import Topic


class Command(NoArgsCommand):
    help = """\
This command synchronizes the forum application's forums and topic objects
by updating their de-normalized fields.
"""
    option_list = NoArgsCommand.option_list + (
        optparse.make_option("-p", "--progress", action="store_true",
            help="Output a . after every 50 topics to show progress"),
    )

    def handle_noargs(self, **opts):

        show_progress = opts.get('progress', False) or False

        n = 0
        for topic in Topic.objects.iterator():
            topic.post_count_update()
            topic.save()
            n += 1
            if n % 50 == 0:
                self.stdout.write('.')
                self.stdout.flush()

        for forum in Forum.objects.all():
            forum.sync()
            forum.save()

        self.stdout.write('\n')