annotate gpp/forums/signals.py @ 480:1a7ca5fa494f

Fixing #229: Download details view with a bogus download ID produces internal server error isntead of a 404.
author Brian Neal <bgneal@gmail.com>
date Wed, 05 Oct 2011 00:09:30 +0000
parents d9b6c4ec1977
children 82b97697312e
rev   line source
bgneal@75 1 """
bgneal@469 2 Signal handlers & signals for the forums application.
bgneal@469 3
bgneal@75 4 """
bgneal@75 5 from django.db.models.signals import post_save
bgneal@75 6 from django.db.models.signals import post_delete
bgneal@469 7 import django.dispatch
bgneal@181 8
bgneal@348 9 from forums.models import Forum, Topic, Post
bgneal@232 10 from forums.views.subscriptions import notify_topic_subscribers
bgneal@390 11 from forums.tools import auto_favorite, auto_subscribe
bgneal@75 12
bgneal@75 13
bgneal@75 14 def on_topic_save(sender, **kwargs):
bgneal@75 15 if kwargs['created']:
bgneal@75 16 topic = kwargs['instance']
bgneal@75 17 topic.forum.topic_count_update()
bgneal@75 18 topic.forum.save()
bgneal@75 19
bgneal@75 20
bgneal@75 21 def on_topic_delete(sender, **kwargs):
bgneal@75 22 topic = kwargs['instance']
bgneal@75 23 topic.forum.topic_count_update()
bgneal@75 24 topic.forum.save()
bgneal@75 25
bgneal@75 26
bgneal@75 27 def on_post_save(sender, **kwargs):
bgneal@75 28 if kwargs['created']:
bgneal@75 29 post = kwargs['instance']
bgneal@75 30
bgneal@75 31 # update the topic
bgneal@75 32 post.topic.post_count_update()
bgneal@75 33 post.topic.save()
bgneal@75 34
bgneal@75 35 # update the forum
bgneal@75 36 post.topic.forum.post_count_update()
bgneal@75 37 post.topic.forum.save()
bgneal@75 38
bgneal@181 39 # send out any email notifications
bgneal@181 40 notify_topic_subscribers(post)
bgneal@181 41
bgneal@390 42 # perform any auto-favorite and auto-subscribe actions for the new post
bgneal@390 43 auto_favorite(post)
bgneal@390 44 auto_subscribe(post)
bgneal@390 45
bgneal@75 46
bgneal@75 47 def on_post_delete(sender, **kwargs):
bgneal@75 48 post = kwargs['instance']
bgneal@75 49
bgneal@75 50 # update the topic
bgneal@348 51 try:
bgneal@348 52 post.topic.post_count_update()
bgneal@348 53 post.topic.save()
bgneal@348 54 except Topic.DoesNotExist:
bgneal@348 55 pass
bgneal@348 56 else:
bgneal@348 57 # update the forum
bgneal@348 58 try:
bgneal@348 59 post.topic.forum.post_count_update()
bgneal@348 60 post.topic.forum.save()
bgneal@348 61 except Forum.DoesNotExist:
bgneal@348 62 pass
bgneal@75 63
bgneal@75 64
bgneal@260 65 post_save.connect(on_topic_save, sender=Topic, dispatch_uid='forums.signals')
bgneal@260 66 post_delete.connect(on_topic_delete, sender=Topic, dispatch_uid='forums.signals')
bgneal@75 67
bgneal@260 68 post_save.connect(on_post_save, sender=Post, dispatch_uid='forums.signals')
bgneal@260 69 post_delete.connect(on_post_delete, sender=Post, dispatch_uid='forums.signals')
bgneal@469 70
bgneal@469 71
bgneal@469 72 # Signals for the forums application.
bgneal@469 73 #
bgneal@469 74 # This signal is sent when a topic has had its textual content (title) changed.
bgneal@469 75 # The provided arguments are:
bgneal@469 76 # sender - the topic model instance
bgneal@469 77 # created - True if the topic is new, False if updated
bgneal@469 78
bgneal@470 79 topic_content_update = django.dispatch.Signal(providing_args=['created'])
bgneal@469 80
bgneal@469 81 # This signal is sent when a post has had its textual content (body) changed.
bgneal@469 82 # The provided arguments are:
bgneal@469 83 # sender - the post model instance
bgneal@469 84 # created - True if the post is new, False if updated
bgneal@469 85
bgneal@470 86 post_content_update = django.dispatch.Signal(providing_args=['created'])
bgneal@469 87
bgneal@469 88
bgneal@469 89 def notify_new_topic(topic):
bgneal@469 90 """
bgneal@469 91 Sends the topic_content_update signal for a new topic instance.
bgneal@469 92
bgneal@469 93 """
bgneal@470 94 topic_content_update.send_robust(topic, created=True)
bgneal@469 95
bgneal@469 96
bgneal@469 97 def notify_updated_topic(topic):
bgneal@469 98 """
bgneal@469 99 Sends the topic_content_update signal for an updated topic instance.
bgneal@469 100
bgneal@469 101 """
bgneal@470 102 topic_content_update.send_robust(topic, created=False)
bgneal@469 103
bgneal@469 104
bgneal@469 105 def notify_new_post(post):
bgneal@469 106 """
bgneal@469 107 Sends the post_content_update signal for a new post instance.
bgneal@469 108
bgneal@469 109 """
bgneal@470 110 post_content_update.send_robust(post, created=True)
bgneal@469 111
bgneal@469 112
bgneal@469 113 def notify_updated_post(post):
bgneal@469 114 """
bgneal@469 115 Sends the post_content_update signal for an updated post instance.
bgneal@469 116
bgneal@469 117 """
bgneal@470 118 post_content_update.send_robust(post, created=False)