view forums/receivers.py @ 1164:68811c583bfb

WIP forum to V3 design commit.
author Brian Neal <bgneal@gmail.com>
date Wed, 12 Apr 2017 20:26:45 -0500
parents 5902dc5e58a3
children
line wrap: on
line source
"""
Signal handlers for the forums application.

"""
from django.db.models.signals import post_save
from django.db.models.signals import post_delete

from forums.models import Forum, Topic, Post
import forums.latest


def on_topic_save(sender, **kwargs):
    if kwargs['created']:
        topic = kwargs['instance']
        topic.forum.topic_count_update()
        topic.forum.save()


def on_topic_delete(sender, **kwargs):
    topic = kwargs['instance']
    topic.forum.topic_count_update()
    topic.forum.save()
    forums.latest.notify_topic_delete(topic)


def on_post_save(sender, **kwargs):
    if kwargs['created']:
        post = kwargs['instance']

        # update the topic
        post.topic.post_count_update()
        post.topic.save()

        # update the forum
        post.topic.forum.post_count_update()
        post.topic.forum.save()


def on_post_delete(sender, **kwargs):
    post = kwargs['instance']

    # update the topic
    try:
        post.topic.post_count_update()
        post.topic.save()
    except Topic.DoesNotExist:
        pass
    else:
        # update the forum
        try:
            post.topic.forum.post_count_update()
            post.topic.forum.save()
        except Forum.DoesNotExist:
            pass


post_save.connect(on_topic_save, sender=Topic, dispatch_uid='forums.receivers')
post_delete.connect(on_topic_delete, sender=Topic, dispatch_uid='forums.receivers')
post_save.connect(on_post_save, sender=Post, dispatch_uid='forums.receivers')
post_delete.connect(on_post_delete, sender=Post, dispatch_uid='forums.receivers')