From 378f5ddb5acb919525002fd92ff249f103ea8f31 Mon Sep 17 00:00:00 2001 From: Jacob Kaplan-Moss Date: Tue, 26 Aug 2008 18:53:52 +0000 Subject: [PATCH] Updated comment signals to provide enough information to actually act on. This was uncovered when working on the documentation, which'll be committed shortly. git-svn-id: http://code.djangoproject.com/svn/django/trunk@8589 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/contrib/comments/signals.py | 6 ++--- django/contrib/comments/views/comments.py | 12 ++++++++-- django/contrib/comments/views/moderation.py | 24 ++++++++++++++++--- .../comment_tests/tests/comment_view_tests.py | 11 ++++----- .../tests/moderation_view_tests.py | 5 ++-- 5 files changed, 41 insertions(+), 17 deletions(-) diff --git a/django/contrib/comments/signals.py b/django/contrib/comments/signals.py index 346a2e0449f..fe1083bd148 100644 --- a/django/contrib/comments/signals.py +++ b/django/contrib/comments/signals.py @@ -9,13 +9,13 @@ from django.dispatch import Signal # discarded and a 403 (not allowed) response. This signal is sent at more or less # the same time (just before, actually) as the Comment object's pre-save signal, # except that the HTTP request is sent along with this signal. -comment_will_be_posted = Signal() +comment_will_be_posted = Signal(providing_args=["comment", "request"]) # Sent just after a comment was posted. See above for how this differs # from the Comment object's post-save signal. -comment_was_posted = Signal() +comment_was_posted = Signal(providing_args=["comment", "request"]) # Sent after a comment was "flagged" in some way. Check the flag to see if this # was a user requesting removal of a comment, a moderator approving/removing a # comment, or some other custom user flag. -comment_was_flagged = Signal() +comment_was_flagged = Signal(providing_args=["comment", "flag", "created", "request"]) diff --git a/django/contrib/comments/views/comments.py b/django/contrib/comments/views/comments.py index f8544937d97..e2b544545ed 100644 --- a/django/contrib/comments/views/comments.py +++ b/django/contrib/comments/views/comments.py @@ -96,7 +96,11 @@ def post_comment(request, next=None): comment.user = request.user # Signal that the comment is about to be saved - responses = signals.comment_will_be_posted.send(comment) + responses = signals.comment_will_be_posted.send( + sender = comment.__class__, + comment = comment, + request = request + ) for (receiver, response) in responses: if response == False: @@ -105,7 +109,11 @@ def post_comment(request, next=None): # Save the comment and signal that it was saved comment.save() - signals.comment_was_posted.send(comment) + signals.comment_was_posted.send( + sender = comment.__class__, + comment = comment, + request = request + ) return next_redirect(data, next, comment_done, c=comment._get_pk_val()) diff --git a/django/contrib/comments/views/moderation.py b/django/contrib/comments/views/moderation.py index 0600b5fe088..3334b0927e9 100644 --- a/django/contrib/comments/views/moderation.py +++ b/django/contrib/comments/views/moderation.py @@ -27,7 +27,13 @@ def flag(request, comment_id, next=None): user = request.user, flag = comments.models.CommentFlag.SUGGEST_REMOVAL ) - signals.comment_was_flagged.send(comment) + signals.comment_was_flagged.send( + sender = comment.__class__, + comment = comment, + flag = flag, + created = created, + request = request, + ) return next_redirect(request.POST.copy(), next, flag_done, c=comment.pk) # Render a form on GET @@ -61,7 +67,13 @@ def delete(request, comment_id, next=None): ) comment.is_removed = True comment.save() - signals.comment_was_flagged.send(comment) + signals.comment_was_flagged.send( + sender = comment.__class__, + comment = comment, + flag = flag, + created = created, + request = request, + ) return next_redirect(request.POST.copy(), next, delete_done, c=comment.pk) # Render a form on GET @@ -98,7 +110,13 @@ def approve(request, comment_id, next=None): comment.is_public = True comment.save() - signals.comment_was_flagged.send(comment) + signals.comment_was_flagged.send( + sender = comment.__class__, + comment = comment, + flag = flag, + created = created, + request = request, + ) return next_redirect(request.POST.copy(), next, approve_done, c=comment.pk) # Render a form on GET diff --git a/tests/regressiontests/comment_tests/tests/comment_view_tests.py b/tests/regressiontests/comment_tests/tests/comment_view_tests.py index 87f5fd372bf..ac7a1d4a5e4 100644 --- a/tests/regressiontests/comment_tests/tests/comment_view_tests.py +++ b/tests/regressiontests/comment_tests/tests/comment_view_tests.py @@ -102,10 +102,8 @@ class CommentViewTests(CommentTestCase): # callback def receive(sender, **kwargs): - self.assertEqual(sender.comment, "This is my comment") - # TODO: Get the two commented tests below to work. -# self.assertEqual(form_data["comment"], "This is my comment") -# self.assertEqual(request.method, "POST") + self.assertEqual(kwargs['comment'].comment, "This is my comment") + self.assert_('request' in kwargs) received_signals.append(kwargs.get('signal')) # Connect signals and keep track of handled ones @@ -117,7 +115,7 @@ class CommentViewTests(CommentTestCase): # Post a comment and check the signals self.testCreateValidComment() self.assertEqual(received_signals, excepted_signals) - + def testWillBePostedSignal(self): """ Test that the comment_will_be_posted signal can prevent the comment from @@ -137,7 +135,8 @@ class CommentViewTests(CommentTestCase): it gets posted """ def receive(sender, **kwargs): - sender.is_public = False # a bad but effective spam filter :)... + # a bad but effective spam filter :)... + kwargs['comment'].is_public = False signals.comment_will_be_posted.connect(receive) self.testCreateValidComment() diff --git a/tests/regressiontests/comment_tests/tests/moderation_view_tests.py b/tests/regressiontests/comment_tests/tests/moderation_view_tests.py index e5ebbb935fe..2f6b51d7098 100644 --- a/tests/regressiontests/comment_tests/tests/moderation_view_tests.py +++ b/tests/regressiontests/comment_tests/tests/moderation_view_tests.py @@ -48,9 +48,8 @@ class FlagViewTests(CommentTestCase): # callback def receive(sender, **kwargs): - flag = sender.flags.get(id=1) - self.assertEqual(flag.flag, CommentFlag.SUGGEST_REMOVAL) - self.assertEqual(flag.user.username, "normaluser") + self.assertEqual(kwargs['flag'].flag, CommentFlag.SUGGEST_REMOVAL) + self.assertEqual(kwargs['request'].user.username, "normaluser") received_signals.append(kwargs.get('signal')) # Connect signals and keep track of handled ones