Django

Code

Changeset 2636

Show
Ignore:
Timestamp:
04/09/06 17:59:25 (3 years ago)
Author:
adrian
Message:

magic-removal: Upgraded django.dispatch to pydispatcher 1.0.3 (which hasn't been released yet; got it from latest CVS)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/branches/magic-removal/django/dispatch/dispatcher.py

    r2403 r2636  
    2626                vs. the original code.) 
    2727""" 
     28from __future__ import generators 
    2829import types, weakref 
    2930from django.dispatch import saferef, robustapply, errors 
    3031 
    3132__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>" 
    32 __cvsid__ = "$Id: dispatcher.py,v 1.8 2004/11/26 06:37:33 mcfletch Exp $" 
    33 __version__ = "$Revision: 1.8 $"[11:-2] 
     33__cvsid__ = "$Id: dispatcher.py,v 1.9 2005/09/17 04:55:57 mcfletch Exp $" 
     34__version__ = "$Revision: 1.9 $"[11:-2] 
     35 
     36try: 
     37        True 
     38except NameError: 
     39        True = 1==1 
     40        False = 1==0 
    3441 
    3542class _Parameter: 
     
    8592                (more precisely saferef.safeRef() must be able to create 
    8693                a reference to the receiver). 
    87  
     94         
    8895                Receivers are fairly flexible in their specification, 
    8996                as the machinery in the robustApply module takes care 
     
    101108 
    102109        signal -- the signal to which the receiver should respond 
    103  
     110         
    104111                if Any, receiver will receive any signal from the 
    105112                indicated sender (which might also be Any, but is not 
    106113                necessarily Any). 
    107  
     114                 
    108115                Otherwise must be a hashable Python object other than 
    109116                None (DispatcherError raised on None). 
    110  
     117                 
    111118        sender -- the sender to which the receiver should respond 
    112  
     119         
    113120                if Any, receiver will receive the indicated signals 
    114121                from any sender. 
    115  
     122                 
    116123                if Anonymous, receiver will only receive indicated 
    117124                signals from send/sendExact which do not specify a 
     
    119126 
    120127                Otherwise can be any python object. 
    121  
     128                 
    122129        weak -- whether to use weak references to the receiver 
    123130                By default, the module will attempt to use weak 
     
    150157                except: 
    151158                        pass 
    152  
     159                 
    153160        receiverID = id(receiver) 
    154161        # get current set, remove any current references to 
     
    194201                automatically.  It's only necessary to disconnect 
    195202                if you want to stop routing to a live object. 
    196  
     203                 
    197204        returns None, may raise DispatcherTypeError or 
    198205                DispatcherKeyError 
     
    299306def send(signal=Any, sender=Anonymous, *arguments, **named): 
    300307        """Send signal from sender to all connected receivers. 
    301  
     308         
    302309        signal -- (hashable) signal value, see connect for details 
    303310 
    304311        sender -- the sender of the signal 
    305  
     312         
    306313                if Any, only receivers registered for Any will receive 
    307314                the message. 
     
    363370                responses.append((receiver, response)) 
    364371        return responses 
    365  
     372         
    366373 
    367374def _removeReceiver(receiver): 
    368375        """Remove receiver from connections.""" 
     376        if not sendersBack: 
     377                # During module cleanup the mapping will be replaced with None 
     378                return False 
    369379        backKey = id(receiver) 
    370380        for senderkey in sendersBack.get(backKey,()): 
     
    389399        except KeyError: 
    390400                pass 
    391  
     401                         
    392402def _cleanupConnections(senderkey, signal): 
    393403        """Delete any empty signals for senderkey. Delete senderkey if empty.""" 
     
    416426        except KeyError: 
    417427                pass 
    418         # Senderkey will only be in senders dictionary if sender 
     428        # Senderkey will only be in senders dictionary if sender  
    419429        # could be weakly referenced. 
    420         try: del senders[senderkey] 
    421         except: pass 
     430        try:  
     431                del senders[senderkey] 
     432        except:  
     433                pass 
    422434 
    423435 
     
    467479                        return True 
    468480                return False 
    469  
    470  
     481                 
     482                 
    471483def _killBackref( receiver, senderkey ): 
    472484        """Do the actual removal of back reference from receiver to senderkey""" 
  • django/branches/magic-removal/django/dispatch/saferef.py

    r1714 r2636  
    5959                        to the same (object, function) pair produce the 
    6060                        same BoundMethodWeakref instance. 
    61                  
     61 
    6262        """ 
    6363        _allInstances = weakref.WeakValueDictionary() 
     
    110110                                        if callable( function ): 
    111111                                                function( self ) 
    112                                 except Exception: 
    113                                         traceback.print_exc() 
     112                                except Exception, e: 
     113                                        try: 
     114                                                traceback.print_exc() 
     115                                        except AttributeError, err: 
     116                                                print '''Exception during saferef %s cleanup function %s: %s'''%( 
     117                                                        self, function, e 
     118                                                ) 
    114119                self.deletionMethods = [onDelete] 
    115120                self.key = self.calculateKey( target ) 
    116121                self.weakSelf = weakref.ref(target.im_self, remove) 
    117122                self.weakFunc = weakref.ref(target.im_func, remove) 
     123                self.selfName = str(target.im_self) 
     124                self.funcName = str(target.im_func.__name__) 
    118125        def calculateKey( cls, target ): 
    119126                """Calculate the reference key for this reference 
     
    128135                return """%s( %s.%s )"""%( 
    129136                        self.__class__.__name__, 
    130                         self.weakSelf()
    131                         self.weakFunc().__name__
     137                        self.selfName
     138                        self.funcName
    132139                ) 
    133140        __repr__ = __str__