Changeset 30
- Timestamp:
- 02/18/02 22:05:30 (7 years ago)
- Files:
-
- trunk/RBJabber/RBJabber/Client.py (modified) (1 diff)
- trunk/RBJabber/RBJabber/SubjectObserver/AssociativeObserver.py (added)
- trunk/RBJabber/RBJabber/SubjectObserver/BidObserver.py (added)
- trunk/RBJabber/RBJabber/SubjectObserver/BidableSubject.py (modified) (1 diff)
- trunk/RBJabber/RBJabber/SubjectObserver/CategorySubject.py (modified) (1 diff)
- trunk/RBJabber/RBJabber/SubjectObserver/Observer.py (modified) (1 diff)
- trunk/RBJabber/RBJabber/SubjectObserver/Subject.py (modified) (1 diff)
- trunk/RBJabber/RBJabber/SubjectObserver/__init__.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/RBJabber/RBJabber/Client.py
r28 r30 73 73 74 74 def __init__(self, *args, **kw): 75 self.stream = SubjectObserver. CategorySubject()75 self.stream = SubjectObserver.BidableCategorySubject() 76 76 apply(Base.Client.__init__, (self,) + args, kw) 77 77 trunk/RBJabber/RBJabber/SubjectObserver/BidableSubject.py
r29 r30 12 12 def t_BidableSubject(BaseSubject): 13 13 class BidableSubjectMixin(BaseSubject): 14 _bids = None15 16 14 def UpdateObserversEx(self, kw): 17 self._bids = None15 self._bids = 0, [] 18 16 result = BaseSubject.UpdateObserversEx(self, kw) 19 if result: 20 for each in self._bids: 21 each(self, kw) 22 self._bids = None 17 if result and self._bids: 18 for each in self._bids[-1]: 19 each.Update(self, kw) 23 20 return result 24 21 25 def Bid(self, priority, callback): 26 if self._bids: 27 if priority > self._bids[0]: 28 self._bids = priority, [callback] 22 def UpdateObserver(self, observer, UpdateDict): 23 if observer: 24 priority = getattr(observer, 'Bid', 0) 25 if callable(priority): 26 priority = priority(self, UpdateDict) 27 if not self._bids or (priority > self._bids[0]): 28 self._bids = priority, [observer] 29 29 elif priority == self._bids[0]: 30 self._bids[-1].append(callback) 31 else: 32 self._bids = priority, [callback] 30 self._bids[-1].append(observer) 33 31 return BidableSubjectMixin 34 32 trunk/RBJabber/RBJabber/SubjectObserver/CategorySubject.py
r29 r30 67 67 def __del__(self): 68 68 self.subject._locked.remove(id(self)) 69 self.subject.UpdateObservers() 69 if self.subject._cachedUpdates: 70 self.subject.UpdateObservers() 70 71 return lock(self) 71 72 trunk/RBJabber/RBJabber/SubjectObserver/Observer.py
r29 r30 15 15 print "On Update:", UpdateDict 16 16 17 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~18 19 class AssociativeObserver:20 def __init__(self):21 self._associations = {}22 23 def AddAssociation(self, Association, Callback):24 self._associations.setdefault(Association, []).append(Callback)25 return self26 27 def Update(self, subject, UpdateDict):28 for each in UpdateDict:29 for callback in self._associations.get(each, []):30 callback(subject, each, UpdateDict[each])31 32 trunk/RBJabber/RBJabber/SubjectObserver/Subject.py
r29 r30 63 63 def __del__(self): 64 64 self.subject._locked.remove(id(self)) 65 self.subject.UpdateObservers() 65 if self.subject._cachedUpdates: 66 self.subject.UpdateObservers() 66 67 return lock(self) 67 68 trunk/RBJabber/RBJabber/SubjectObserver/__init__.py
r29 r30 5 5 from Subject import Subject 6 6 from CategorySubject import CategorySubject 7 from Observer import Observer, AssociativeObserver 7 from Observer import Observer 8 from AssociativeObserver import AssociativeObserver 9 from BidObserver import BidObserver 8 10 from AttributedSubject import AttributedSubject, AttributedCategorySubject, t_AttributedSubject 9 11 from BidableSubject import BidableSubject, BidableCategorySubject, t_BidableSubject
