Django

Code

root/django/branches/newforms-admin/django/dispatch/robust.py

Revision 4265, 2.0 kB (checked in by adrian, 2 years ago)

Fixed #3191 -- Set 'svn:eol-style native' on the files that didn't have it. Thanks, jjl@pobox.com

  • Property svn:eol-style set to native
Line 
1 """Module implementing error-catching version of send (sendRobust)"""
2 from django.dispatch.dispatcher import Any, Anonymous, liveReceivers, getAllReceivers
3 from django.dispatch.robustapply import robustApply
4
5 def sendRobust(
6     signal=Any,
7     sender=Anonymous,
8     *arguments, **named
9 ):
10     """Send signal from sender to all connected receivers catching errors
11     
12     signal -- (hashable) signal value, see connect for details
13
14     sender -- the sender of the signal
15     
16         if Any, only receivers registered for Any will receive
17         the message.
18
19         if Anonymous, only receivers registered to receive
20         messages from Anonymous or Any will receive the message
21
22         Otherwise can be any python object (normally one
23         registered with a connect if you actually want
24         something to occur).
25
26     arguments -- positional arguments which will be passed to
27         *all* receivers. Note that this may raise TypeErrors
28         if the receivers do not allow the particular arguments.
29         Note also that arguments are applied before named
30         arguments, so they should be used with care.
31
32     named -- named arguments which will be filtered according
33         to the parameters of the receivers to only provide those
34         acceptable to the receiver.
35
36     Return a list of tuple pairs [(receiver, response), ... ]
37
38     if any receiver raises an error (specifically any subclass of Exception),
39     the error instance is returned as the result for that receiver.
40     """
41     # Call each receiver with whatever arguments it can accept.
42     # Return a list of tuple pairs [(receiver, response), ... ].
43     responses = []
44     for receiver in liveReceivers(getAllReceivers(sender, signal)):
45         try:
46             response = robustApply(
47                 receiver,
48                 signal=signal,
49                 sender=sender,
50                 *arguments,
51                 **named
52             )
53         except Exception, err:
54             responses.append((receiver, err))
55         else:
56             responses.append((receiver, response))
57     return responses
Note: See TracBrowser for help on using the browser.