annotate gpp/forums/signals.py @ 505:a5d11471d031

Refactor the logic in the rate limiter decorator. Check to see if the request was ajax, as the ajax view always returns 200. Have to decode the JSON response to see if an error occurred or not.
author Brian Neal <bgneal@gmail.com>
date Sat, 03 Dec 2011 19:13:38 +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)