Changeset 159

Show
Ignore:
Timestamp:
05/17/02 17:33:10 (6 years ago)
Author:
sholloway
Message:

Added priorities to Subjects

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/RBJabber/RBJabber/JabberSubject.py

    r141 r159  
    5050 
    5151class FromJIDSubjectMixin(JabberSubjectBase): 
    52     def AddObserver(self, category, observer): 
    53         super(FromJIDSubjectMixin, self).AddObserver(JID.JID(category), observer
     52    def AddObserver(self, category, *args, **kw): 
     53        apply(super(FromJIDSubjectMixin, self).AddObserver, (JID.JID(category),) + args, kw
    5454 
    5555    def RemoveObserver(self, category, observer): 
  • trunk/RBJabber/RBJabber/SubjectObserver/AttributedSubject.py

    r150 r159  
    143143 
    144144class AttributedSubject(AttributedSubjectMixin, Subject):  
    145     def AddObserver(self, observer, call=0): 
    146         Subject.AddObserver(self, observer
     145    def AddObserver(self, observer, call=0, **kw): 
     146        apply(Subject.AddObserver, (self, observer), kw
    147147        if call: observer(self) 
    148148 
  • trunk/RBJabber/RBJabber/SubjectObserver/CategorySubject.py

    r137 r159  
    3737from Subject import Subject 
    3838from Foundation import WeakBind 
     39import bisect 
    3940 
    4041#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    5152    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    5253     
    53     def AddObserver(self, category, observer): 
     54    def AddObserver(self, category, observer, priority=0): 
    5455        result = WeakBind.BindCallable(observer) 
    55         self._observers.setdefault(category,[]).append(result
     56        bisect.insort(self._observers.setdefault(category,[]), (-priority, result)
    5657        return self 
    5758 
     
    5960        result = WeakBind.BindCallable(observer) 
    6061        for observers in self._observers.itervalues(): 
    61             try: 
    62                 while 1: observers.remove(result) 
    63             except ValueError: pass # result no longer in the list 
     62            observers[:] = [x for x in observers if x[-1] != result] 
    6463        return self 
    6564 
     
    6968    
    7069    def _ObserverList(self, category): 
    71         lst = self._observers.setdefault(category, []) 
    72         lst[:] = filter(None, lst) 
    73         return lst 
     70        observers = self._observers.setdefault(category, []) 
     71        observers[:] = [x for x in observers if x[-1]] 
     72        return [x[-1] for x in observers] 
    7473    def _AllObserversList(self): 
    75         return [x for y in self._observers.values() for x in y] 
     74        return [x[-1] for y in self._observers.values() for x in y] 
    7675    Observers = property(_AllObserversList) 
    7776 
  • trunk/RBJabber/RBJabber/SubjectObserver/StateMachine.py

    r132 r159  
    9999            if self.value and not self._Influxs: 
    100100                self.UpdateObservers(precondition=self.value) 
    101             self.StateSubject.UpdateObservers(state=value
     101            self.StateSubject.UpdateObservers(state=self
    102102            if self._handled > 0:  
    103103                self._handled = 0 
     
    118118    def AddInflux(self, Influx): 
    119119        self._Influxs.append(Influx) 
    120         Influx.StateSubject.AddObserver(self.CheckInfluxs
     120        Influx.StateSubject.AddObserver(self.CheckInfluxs, priority=-1
    121121 
    122122    def AddOutflux(self, Outflux): 
  • trunk/RBJabber/RBJabber/SubjectObserver/Subject.py

    r138 r159  
    3636 
    3737from Foundation import WeakBind 
     38import bisect 
    3839 
    3940#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    6061    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    6162     
    62     def AddObserver(self, observer): 
     63    def AddObserver(self, observer, priority=0): 
    6364        """Adds observer to the internal collection monitoring this subject 
    6465        Observer is assumed to be a callable object.""" 
    6566        result = WeakBind.BindCallable(observer) 
    66         self._observers.append(result
     67        bisect.insort(self._observers, (-priority, result)
    6768        return self 
    6869 
     
    7172        Observer should be the same object that was passed to AddObserver.""" 
    7273        result = WeakBind.BindCallable(observer) 
    73         try: 
    74             while 1: self._observers.remove(result) 
    75         except ValueError: pass # result no longer in the list 
     74        self._observers = [x for x in self._observers if x[-1] != result] 
    7675        return self 
    7776 
     
    8281    def _ObserverList(self): 
    8382        """Returns the internal observer collection pruned of invalid weakref objects as a list""" 
     83        self._observers = [x for x in self._observers if x[-1]] 
    8484        self._observers = filter(None, self._observers) 
    85         return self._observers 
     85        return [x[-1] for x in self._observers] 
    8686    Observers = property(_ObserverList) 
    8787 
  • trunk/RBJabber/RBJabber/SubjectObserver/__init__.py

    r138 r159  
    106106 
    107107    s1.AddObserver(printo1) 
    108     s1.AddObserver(printo2
     108    s1.AddObserver(printo2, priority=-1
    109109    s2.AddObserver(printo2) 
    110110 
  • trunk/RBSkinning/RBSkinning/wxTools/wxEvtHandlerBidableCategorySubject.py

    r137 r159  
    5252            evt.Skip() 
    5353     
    54     def AddObserver(self, category, observer): 
     54    def AddObserver(self, category, *args, **kw): 
    5555        self.EvtHandler.Connect(-1, -1, category, BindCallable(self._OnEvent)) 
    56         BidableCategorySubject.AddObserver(self, ('event', category), observer
     56        apply(BidableCategorySubject.AddObserver, (self, ('event', category)) + args, kw
    5757