Changeset 65
- Timestamp:
- 03/17/02 19:34:00 (6 years ago)
- Files:
-
- trunk/RBFoundation/RBFoundation/ContextApply.py (modified) (2 diffs)
- trunk/RBFoundation/RBFoundation/WeakBind.py (added)
- trunk/RBJabber/RBJabber/Client.py (modified) (1 diff)
- trunk/RBJabber/RBJabber/JabberConnection.py (modified) (2 diffs)
- trunk/RBJabber/RBJabber/MessageRouter.py (modified) (4 diffs)
- trunk/RBJabber/RBJabber/PresenceMap.py (modified) (5 diffs)
- trunk/RBJabber/RBJabber/SubjectObserver/AssociativeObserver.py (modified) (2 diffs)
- trunk/RBJabber/RBJabber/SubjectObserver/AttributedSubject.py (modified) (2 diffs)
- trunk/RBJabber/RBJabber/SubjectObserver/BidableSubject.py (modified) (3 diffs)
- trunk/RBJabber/RBJabber/SubjectObserver/CategorySubject.py (modified) (4 diffs)
- trunk/RBJabber/RBJabber/SubjectObserver/Observer.py (modified) (1 diff)
- trunk/RBJabber/RBJabber/SubjectObserver/Subject.py (modified) (4 diffs)
- trunk/RBJabber/RBJabber/SubjectObserver/__init__.py (modified) (3 diffs)
- trunk/RBJabber/RBJabber/Test.py (modified) (4 diffs)
- trunk/RBJabber/RBJabber/iqAuthQuery.py (modified) (6 diffs)
- trunk/RBJabber/RBJabber/iqBrowseResponse.py (modified) (1 diff)
- trunk/RBJabber/RBJabber/iqQuery.py (modified) (6 diffs)
- trunk/RBJabber/RBJabber/iqResponse.py (modified) (5 diffs)
- trunk/RBJabber/RBJabber/iqRosterQuery.py (modified) (3 diffs)
- trunk/RBJabber/RBJabber/iqTimeResponse.py (modified) (1 diff)
- trunk/RBJabber/RBJabber/iqVersionResponse.py (modified) (1 diff)
- trunk/RBPrivate/Prototypes/ChatClient/ChatMediator.py (modified) (4 diffs)
- trunk/RBPrivate/Prototypes/ChatClient/ClientModel.py (modified) (2 diffs)
- trunk/RBPrivate/Prototypes/ChatClient/MainframeBuddyList.py (modified) (4 diffs)
- trunk/RBPrivate/Prototypes/ChatClient/MessageFactory.py (modified) (3 diffs)
- trunk/RBPrivate/Prototypes/ChatClient/RuneBladeClient.py (modified) (3 diffs)
- trunk/RBSkinning/RBSkinning/test_inner.skin (modified) (1 diff)
- trunk/RBSkinning/RBSkinning/xmlPython/evaluate.py (modified) (2 diffs)
- trunk/RBSkinning/RBSkinning/xmlPython/obj_variable.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/RBFoundation/RBFoundation/ContextApply.py
r64 r65 4 4 5 5 import weakref 6 import types 6 from WeakBind import BindCallable 7 7 8 8 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 19 19 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 20 20 21 class BindMethod: 22 def __init__(self, callback): 23 if isinstance(callback, (types.MethodType, types.UnboundMethodType)): 24 self.im_self = weakref.ref(callback.im_self) 25 self.im_func = callback.im_func 26 else: 27 self.im_self = None 28 self.im_func = callback 29 30 def __nonzero__(self): 31 return self.im_func and (not self.im_self or self.im_self()) and 1 or 0 32 33 def __call__(self, *args, **kw): 34 return self._DoCall(args, kw) 35 36 def _DoCall(self, args, kw): 37 if self.im_self: 38 return apply(self.im_func, (self.im_self(),) + args, kw) 39 else: return apply(self.im_func, args, kw) 40 41 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 42 43 class _ContextApply(BindMethod): 21 class _ContextApply(BindCallable): 44 22 def __init__(self, callback, *args, **kw): 45 Bind Method.__init__(self, callback)23 BindCallable.__init__(self, callback) 46 24 self.args = args 47 25 self.kw = kw trunk/RBJabber/RBJabber/Client.py
r61 r65 91 91 def __init__(self, *args, **kw): 92 92 self.stream = SubjectObserver.BidableCategorySubject() 93 self.information = SubjectObserver.AttributedSubject ()93 self.information = SubjectObserver.AttributedSubject.AttributedSubject() 94 94 apply(Base.Client.__init__, (self,) + args, kw) 95 95 trunk/RBJabber/RBJabber/JabberConnection.py
r64 r65 5 5 from Foundation.XMLBuilder import XMLBuilderMixin, XMLBuilderObjectBase, ParserCreate 6 6 from Foundation import SmartSelect 7 from Foundation.ContextApply import Bind Method7 from Foundation.ContextApply import BindCallable 8 8 from JID import * 9 9 import socket … … 50 50 self._parser = ParserCreate('ASCII', self._seperator) 51 51 self._parser.returns_unicode = 0 52 self._parser.StartElementHandler = Bind Method(self._start_element)53 self._parser.EndElementHandler = Bind Method(self._end_element)54 self._parser.CharacterDataHandler = Bind Method(self._char_data)52 self._parser.StartElementHandler = BindCallable(self._start_element) 53 self._parser.EndElementHandler = BindCallable(self._end_element) 54 self._parser.CharacterDataHandler = BindCallable(self._char_data) 55 55 56 56 # Send the initial header trunk/RBJabber/RBJabber/MessageRouter.py
r53 r65 4 4 5 5 from Foundation.SubjectObserver.Subject import Subject 6 from Foundation.SubjectObserver.BidableSubject import BiddableLogicMixin 6 from Foundation.SubjectObserver.Observer import Observer 7 from Foundation.SubjectObserver.BidableSubject import BidableSubjectMixin 7 8 from JID import * 8 9 … … 11 12 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 12 13 13 class MessageRouterBase(Bid dableLogicMixin):14 class MessageRouterBase(BidableSubjectMixin): 14 15 def __init__(self, JC, MessageMapEntryClass=None): 15 JC.stream.AddObserver('message', self) 16 self._observer = Observer(self.Update, self.Bid) 17 JC.stream.AddObserver('message', self._observer) 16 18 self._UpdateMap = {} 17 19 if not MessageMapEntryClass: … … 19 21 self.MessageMapEntryClass = MessageMapEntryClass 20 22 21 def Bid(self, subject, UpdateDict): 23 def Update(self, subject, **UpdateDict): 24 pass 25 26 def Bid(self, subject, **UpdateDict): 22 27 message = UpdateDict.get('message', None) 23 28 for index in self._UpdateMapXForm(message): … … 25 30 if UpdateSubject: 26 31 for obs in UpdateSubject.Observers: 27 subject._GetBid(obs (), UpdateDict)32 subject._GetBid(obs, UpdateDict) 28 33 29 34 def Get(self, index, bCreateSubject=1): trunk/RBJabber/RBJabber/PresenceMap.py
r58 r65 4 4 5 5 from Foundation.SubjectObserver.Subject import Subject 6 from Foundation.SubjectObserver.BidableSubject import BiddableLogicMixin 6 from Foundation.SubjectObserver.Observer import Observer 7 from Foundation.SubjectObserver.BidableSubject import BidableSubjectMixin 7 8 from JID import * 8 9 … … 14 15 def __init__(self, JC): 15 16 Subject.__init__(self) 16 JC.stream.AddObserver('presence', self)17 JC.stream.AddObserver('presence', Observer(self.Update)) 17 18 self.ByJID = {} 18 19 self.ByResource = {} 19 20 20 def Update(self, subject, UpdateDict):21 def Update(self, subject, **UpdateDict): 21 22 presence = UpdateDict.get('presence', None) 22 23 FromJID = JIDsplit(presence.from_) … … 37 38 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 38 39 39 class PresenceUpdateMap(Bid dableLogicMixin):40 class PresenceUpdateMap(BidableSubjectMixin): 40 41 def __init__(self, JC, PresenceMapEntryClass=None): 41 JC.stream.AddObserver('presence', self)42 JC.stream.AddObserver('presence', Observer(self.Update, self.Bid)) 42 43 self._UpdateMap = {} 43 44 if not PresenceMapEntryClass: … … 52 53 return self._UpdateIndexXForm(node.from_) 53 54 54 def Bid(self, subject, UpdateDict):55 def Bid(self, subject, **UpdateDict): 55 56 presence = UpdateDict.get('presence', None) 56 57 lstXForms = self._UpdateMapXForm(presence) … … 60 61 for obs in UpdateSubject.Observers: 61 62 subject._GetBid(obs(), UpdateDict) 63 64 def Update(self, subject, **UpdateDict): 65 pass # Weird condition... no bids on it, but we really dont care here 62 66 63 67 def Get(self, index, bCreateSubject=1): trunk/RBJabber/RBJabber/SubjectObserver/AssociativeObserver.py
r30 r65 1 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2 #~ Imports 3 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4 5 from Foundation.WeakBind import BindCallable as _BindCallable 6 1 7 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2 8 #~ Definitions … … 8 14 9 15 def AddAssociation(self, Association, Callback): 10 self._associations.setdefault(Association, []).append( Callback)16 self._associations.setdefault(Association, []).append(_BindCallable(Callback)) 11 17 return self 12 18 13 def Update(self, subject,UpdateDict):14 for each in UpdateDict:19 def __call__(self, subject, **UpdateDict): 20 for each, value in UpdateDict.iteritems(): 15 21 for callback in self._associations.get(each, []): 16 callback(subject, each, UpdateDict[each])22 callback(subject, each, valuse) 17 23 trunk/RBJabber/RBJabber/SubjectObserver/AttributedSubject.py
r29 r65 4 4 5 5 from Subject import Subject 6 from CategorySubject import CategorySubject7 6 8 7 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 10 9 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 11 10 12 def t_AttributedSubject(BaseSubject): 13 class AttributedSubjectMixin(BaseSubject): 14 def __init__(self): 15 BaseSubject.__init__(self) 16 self._attributes = {} 11 class AttributedSubjectMixin(object): 12 def __init__(self, *args, **kw): 13 apply(super(AttributedSubjectMixin, self).__init__, args, kw) 14 self._attributes = {} 17 15 18 def __getattribute__(self, name):19 if '_' != name[0]:20 result = self._attributes.get(name, None)21 if result != None:22 return result23 return BaseSubject.__getattribute__(self,name)16 def __getattribute__(self, name): 17 if '_' != name[0]: 18 result = self._attributes.get(name, None) 19 if result != None: 20 return result 21 return super(AttributedSubjectMixin, self).__getattribute__(name) 24 22 25 def __setattr__(self, name, value): 26 if '_' != name[0]: 27 self._attributes[name] = value 28 apply(self.UpdateObservers, tuple(), {name: value}) 29 else: 30 return BaseSubject.__setattr__(self, name, value) 31 return AttributedSubjectMixin 23 def __setattr__(self, name, value): 24 if '_' != name[0]: 25 self._attributes[name] = value 26 apply(self.UpdateObservers, tuple(), {name: value}) 27 else: 28 return super(AttributedSubjectMixin, self).__setattr__(name, value) 32 29 33 AttributedSubject = t_AttributedSubject(Subject) 34 AttributedCategorySubject = t_AttributedSubject(CategorySubject) 30 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 31 32 class AttributedSubject(AttributedSubjectMixin, Subject): 33 pass 34 trunk/RBJabber/RBJabber/SubjectObserver/BidableSubject.py
r52 r65 4 4 5 5 from Subject import Subject 6 from CategorySubject import CategorySubject7 6 8 7 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 10 9 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 11 10 12 class Bid dableLogicMixin:11 class BidableSubjectMixin(object): 13 12 def _GetBid(self, observer, UpdateDict): 14 13 bid = getattr(observer, 'Bid', None) 15 14 if bid is None: 16 15 # This client does not payattention to bids... 17 observer.Update(self, UpdateDict)16 apply(observer, (self,), UpdateDict) 18 17 else: 19 18 if callable(bid): 20 bid = bid(self, UpdateDict)19 bid = apply(bid, (self,), UpdateDict) 21 20 if bid: 22 21 if bid > self._bids[0]: … … 25 24 self._bids[-1].append(observer) 26 25 27 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 26 def UpdateObserversEx(self, UpdateDict): 27 self._bids = 0, [] 28 result = self.__super.UpdateObserversEx(UpdateDict) 29 if result and self._bids: 30 for observer in self._bids[-1]: 31 apply(observer, (self,), UpdateDict) 32 return result 33 34 def UpdateObserver(self, observer, UpdateDict): 35 if observer: self._GetBid(observer, UpdateDict) 28 36 29 def t_BidableSubject(BaseSubject): 30 class BidableSubjectMixin(BaseSubject, BiddableLogicMixin): 31 def UpdateObserversEx(self, kw): 32 self._bids = 0, [] 33 result = BaseSubject.UpdateObserversEx(self, kw) 34 if result and self._bids: 35 for each in self._bids[-1]: 36 each.Update(self, kw) 37 return result 38 39 def UpdateObserver(self, observer, UpdateDict): 40 if observer: 41 self._GetBid(observer, UpdateDict) 42 return BidableSubjectMixin 37 BidableSubjectMixin._BidableSubjectMixin__super = super(BidableSubjectMixin) 43 38 44 39 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 45 40 46 BidableSubject = t_BidableSubject(Subject) 47 BidableCategorySubject = t_BidableSubject(CategorySubject) 41 class BidableSubject(BidableSubjectMixin, Subject): 42 pass 48 43 trunk/RBJabber/RBJabber/SubjectObserver/CategorySubject.py
r30 r65 3 3 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4 4 5 from Subject import Subject 5 6 import weakref 6 7 7 8 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 8 #~ Title9 #~ Definitions 9 10 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 10 11 11 class CategorySubject( object):12 class CategorySubject(Subject): 12 13 def __init__(self): 14 super(CategorySubject, self).__init__() 13 15 self._observers = {} 14 self._cachedUpdates = {}15 self._locked = []16 16 17 17 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 20 20 21 21 def AddObserver(self, category, observer, bUpdate=0): 22 self._observers.setdefault(category,[]).append(weakref.ref(observer))23 if bUpdate:24 self.UpdateObserver(observer, self._cachedUpdates)22 result = self._WrapObserver(observer) 23 self._observers.setdefault(category,[]).append(result) 24 if bUpdate: self.UpdateObserver(result, self._cachedUpdates) 25 25 return self 26 26 27 27 def RemoveObserver(self, observer): 28 wrobserver = weakref.ref(observer)28 result = self._WrapObserver(observer) 29 29 for observers in self._observers.itervalues(): 30 while wrobserver in observers: 31 observers.remove(wrobserver) 30 try: 31 while 1: observers.remove(result) 32 except ValueError: pass # result no longer in the list 32 33 return self 33 34 … … 37 38 38 39 def _ObserverList(self, category): 39 lst = self._observers.get(category, []) 40 if lst: 41 lst = self._observers[category] = [obs for obs in lst if obs()] 40 lst = self._observers.setdefault(category, []) 41 lst[:] = filter(None, lst) 42 42 return lst 43 44 def UpdateObservers(self, **kw):45 return self.UpdateObserversEx(kw)43 def _AllObserversList(self): 44 return [x for y in self._observers.values() for x in y] 45 Observers = property(_AllObserversList) 46 46 47 47 def UpdateObserversEx(self, kw): … … 52 52 for category, value in _cachedUpdates.iteritems(): 53 53 for each in self._ObserverList(category): 54 self.UpdateObserver(each (), {category: value})54 self.UpdateObserver(each, {category: value}) 55 55 return 1 56 56 else: return 0 57 57 58 def UpdateObserver(self, observer, UpdateDict):59 if observer:60 observer.Update(self, UpdateDict)61 62 def Lock(self):63 class lock:64 def __init__(self, lockedsubject):65 self.subject = lockedsubject66 self.subject._locked.append(id(self))67 def __del__(self):68 self.subject._locked.remove(id(self))69 if self.subject._cachedUpdates:70 self.subject.UpdateObservers()71 return lock(self)72 trunk/RBJabber/RBJabber/SubjectObserver/Observer.py
r30 r65 1 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2 #~ Imports 3 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4 5 from Foundation.WeakBind import BindCallable as _BindCallable 6 1 7 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2 8 #~ Definitions 3 9 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4 10 5 class Observer( object):6 def __init__(self, callback=None ):7 if callback:8 self.SetUpdateCallback(callback)11 class Observer(_BindCallable): 12 def __init__(self, callback=None, Bid=None): 13 super(Observer, self).__init__(callback or self.Update) 14 self.SetBid(Bid) 9 15 10 def SetUpdateCallback(self, callback): 11 self.Update = callback 12 return self 16 def SetBid(self, Bid=None): 17 if callable(Bid): 18 self.Bid = _BindCallable(Bid) 19 elif Bid: 20 self.Bid = Bid 21 elif hasattr(self, 'Bid'): 22 del self.Bid 13 23 14 def Update(self, subject, UpdateDict): 15 print "On Update:", UpdateDict 16 24 def Update(self, subject, **UpdateDict): 25 print "On Update:", subject.__class__.__name__, UpdateDict trunk/RBJabber/RBJabber/SubjectObserver/Subject.py
r52 r65 3 3 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4 4 5 from Foundation import WeakBind 5 6 import weakref 6 7 … … 20 21 21 22 def AddObserver(self, observer, bUpdate=0): 22 self._observers.append(weakref.ref(observer))23 if bUpdate:24 self.UpdateObserver(observer, self._cachedUpdates)23 result = self._WrapObserver(observer) 24 self._observers.append(observer) 25 if bUpdate: self.UpdateObserver(result, self._cachedUpdates) 25 26 return self 26 27 27 28 def RemoveObserver(self, observer): 28 wrobserver = weakref.ref(observer) 29 while wrobserver in self._observers: 30 self._observers.remove(wrobserver) 29 result = self._WrapObserver(observer) 30 try: 31 while 1: self._observers.remove(result) 32 except ValueError: pass # result no longer in the list 31 33 return self 32 34 … … 35 37 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 36 38 39 def _WrapObserver(self, observer): 40 if not isinstance(observer, WeakBind.BindCallable): 41 observer = WeakBind.BindCallable(observer) 42 return observer 43 37 44 def _ObserverList(self): 38 self._observers = [obs for obs in self._observers if obs()]45 self._observers = filter(None, self._observers) 39 46 return self._observers 40 47 Observers = property(_ObserverList) … … 49 56 lock = self.Lock() 50 57 for each in self.Observers: 51 self.UpdateObserver(each (), _cachedUpdates)58 self.UpdateObserver(each, _cachedUpdates) 52 59 return 1 53 60 else: return 0 54 61 55 62 def UpdateObserver(self, observer, UpdateDict): 56 if observer: 57 observer.Update(self, UpdateDict) 63 if observer: apply(observer, (self,), UpdateDict) 58 64 59 65 def Lock(self): trunk/RBJabber/RBJabber/SubjectObserver/__init__.py
r31 r65 3 3 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4 4 5 from Observerimport Observer6 from AssociativeObserverimport AssociativeObserver5 import Observer 6 import AssociativeObserver 7 7 8 from Subjectimport Subject9 from CategorySubjectimport CategorySubject10 from AttributedSubject import AttributedSubject, AttributedCategorySubject, t_AttributedSubject11 from BidableSubject import BidableSubject, BidableCategorySubject, t_BidableSubject8 import Subject 9 import CategorySubject 10 import AttributedSubject 11 import BidableSubject 12 12 13 AttributedBidableSubject = t_AttributedSubject(t_BidableSubject(Subject)) 14 AttributedBidableCategorySubject = t_AttributedSubject(t_BidableSubject(CategorySubject)) 13 class AttributedCategorySubject(AttributedSubject.AttributedSubjectMixin, CategorySubject.CategorySubject): 14 pass 15 class AttributedBidableSubject(AttributedSubject.AttributedSubjectMixin, BidableSubject.BidableSubjectMixin, Subject.Subject): 16 pass 17 class AttributedBidableCategorySubject(AttributedSubject.AttributedSubjectMixin, BidableSubject.BidableSubjectMixin, CategorySubject.CategorySubject): 18 pass 15 19 16 BidableAttributedSubject = t_BidableSubject(t_AttributedSubject(Subject)) 17 BidableAttributedCategorySubject = t_BidableSubject(t_AttributedSubject(CategorySubject)) 20 class BidableCategorySubject(BidableSubject.BidableSubjectMixin, CategorySubject.CategorySubject): 21 pass 22 class BidableAttributedSubject(AttributedSubject.AttributedSubjectMixin, BidableSubject.BidableSubjectMixin, Subject.Subject): 23 pass 24 class BidableAttributedCategorySubject(AttributedSubject.AttributedSubjectMixin, BidableSubject.BidableSubjectMixin, CategorySubject.CategorySubject): 25 pass 18 26 19 27 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 22 30 23 31 def _Test_SubjectObservers(): 24 def printo1(subject, UpdateDict):32 def printo1(subject, **UpdateDict): 25 33 print "O1: ", UpdateDict 26 def printo2(subject, UpdateDict):34 def printo2(subject, **UpdateDict): 27 35 print "O2: ", UpdateDict 28 def printo3(subject, UpdateDict):36 def printo3(subject, **UpdateDict): 29 37 print "O3: ", UpdateDict 30 s1 = Subject ()31 s2 = AttributedSubject ()38 s1 = Subject.Subject() 39 s2 = AttributedSubject.AttributedSubject() 32 40 s3 = AttributedCategorySubject() 33 41 34 o1 = Observer (printo1)42 o1 = Observer.Observer(printo1) 35 43 s1.AddObserver(o1) 36 o2 = Observer (printo2)44 o2 = Observer.Observer(printo2) 37 45 s1.AddObserver(o2) 38 46 s2.AddObserver(o2) … … 50 58 print "Unlocked" 51 59 52 o3 = Observer (printo3)60 o3 = Observer.Observer(printo3) 53 61 s3.AddObserver('CategoryA', o1) 54 62 s3.AddObserver('CategoryB', o2) trunk/RBJabber/RBJabber/Test.py
r56 r65 20 20 print 21 21 22 def _printTypedMessage(subject, UpdateDict):22 def _printTypedMessage(subject,**UpdateDict): 23 23 value = UpdateDict['message'] 24 24 print … … 39 39 print 40 40 41 def _printAuth(subject, UpdateDict):41 def _printAuth(subject,**UpdateDict): 42 42 print 43 43 print "Authenticated" … … 90 90 apply(jc.Authenticate, tuple(), dictLogin) 91 91 92 obs = SubjectObserver.AssociativeObserver ()92 obs = SubjectObserver.AssociativeObserver.AssociativeObserver() 93 93 jc.stream.AddObserver('message', obs) 94 94 jc.stream.AddObserver('presence', obs) … … 98 98 pm = PresenceMap(jc) 99 99 router = MessageRouterByType(jc) 100 obs = SubjectObserver.Observer (_printTypedMessage)100 obs = SubjectObserver.Observer.Observer(_printTypedMessage) 101 101 obs.Bid = 10 102 102 router.Get('message').AddObserver(obs) trunk/RBJabber/RBJabber/iqAuthQuery.py
r55 r65 6 6 import select 7 7 import sha 8 from Foundation.SubjectObserver.Observer import Observer 9 from Foundation.WeakBind import BindCallable 8 10 from xml.sax.saxutils import escape, quoteattr 9 11 from iqQuery import iqQueryBase, Subject … … 16 18 def __init__(self, JabberClient, username, password, resource): 17 19 self.JC = weakref.ref(JabberClient) 18 self.JC().stream.AddObserver('iq', self) 20 self._observer = Observer(self.Update, self.Bid) 21 self.JC().stream.AddObserver('iq', self._observer) 19 22 20 23 if not self.JC()._elements: … … 38 41 self._SetLink(1) 39 42 40 def Bid(self, subject, UpdateDict):43 def Bid(self, subject, **UpdateDict): 41 44 iq = UpdateDict.get('iq', None) 42 45 if iq: … … 46 49 return -1 47 50 48 def Update(self, subject, UpdateDict):51 def Update(self, subject, **UpdateDict): 49 52 iq = UpdateDict['iq'] 50 53 if iq.type == 'result': … … 59 62 Subject.__init__(self) 60 63 61 def Update(self, subject, UpdateDict):64 def Update(self, subject, **UpdateDict): 62 65 # Notify our callback 63 iqAuthQueryBase.Update(self, subject, UpdateDict)66 apply(iqAuthQueryBase.Update, (self, subject,), UpdateDict) 64 67 self.UpdateObserversEx(UpdateDict) 65 68 … … 69 72 def __init__(self, JabberClient, ReplyCallback, *args, **kw): 70 73 apply(iqAuthQueryBase.__init__, (self, JabberClient) + args, kw) 71 self.ReplyCallback = ReplyCallback74 self.ReplyCallback = BindCallable(ReplyCallback) 72 75 73 def Update(self, subject, UpdateDict):76 def Update(self, subject, **UpdateDict): 74 77 # Notify our callback 75 iqAuthQueryBase.Update(self, subject, UpdateDict)76 self.ReplyCallback(subject, UpdateDict)78 apply(iqAuthQueryBase.Update, (self, subject,), UpdateDict) 79 apply(self.ReplyCallback, (subject,), UpdateDict) 77 80 trunk/RBJabber/RBJabber/iqBrowseResponse.py
r55 r65 13 13 14 14 class iqBrowseResponse(iqResponseBase): 15 def __init__(self, JC ):15 def __init__(self, JC, Bid=1): 16 16 iqResponseBase.__init__(self, JC) 17 17 self.AnswerQuery("jabber:iq:browse") 18 self.Bid = 1 18 19 19 def Update(self, subject,UpdateDict):20 def __call__(self, subject, **UpdateDict): 20 21 iq = UpdateDict['iq'] 21 22 iq.to = iq.from_ trunk/RBJabber/RBJabber/iqQuery.py
r55 r65 4 4 5 5 import weakref 6 from Foundation.SubjectObserver import Subject 6 from Foundation.SubjectObserver.Subject import Subject 7 from Foundation.SubjectObserver.Observer import Observer 7 8 from xml.sax.saxutils import escape, quoteattr 8 9 … … 14 15 def __init__(self, JabberClient): 15 16 self.JC = weakref.ref(JabberClient) 17 self._observer = Observer(self.Update, self.Bid) 16 18 17 def Bid(self, subject, UpdateDict):19 def Bid(self, subject, **UpdateDict): 18 20 iq = UpdateDict.get('iq', None) 19 21 if iq: … … 30 32 return 0 31 33 32 def Update(self, subject, UpdateDict):34 def Update(self, subject, **UpdateDict): 33 35 # Unhook ourselves 34 self.JC().stream.RemoveObserver(self )36 self.JC().stream.RemoveObserver(self._observer) 35 37 # Unlink our self reference since we are done 36 38 self._SetLink(0) … … 47 49 self._SetLink(1) 48 50 # Lets observer the jabber stream 49 self.JC().stream.AddObserver('iq', self )51 self.JC().stream.AddObserver('iq', self._observer) 50 52 # Setup our match attributes 51 53 self.nsQuery = nsQuery … … 68 70 Subject.__init__(self) 69 71 70 def Update(self, subject, UpdateDict):72 def Update(self, subject, **UpdateDict): 71 73 # Notify our callback 72 iqQueryBase.Update(self, subject, UpdateDict)74 apply(iqQueryBase.Update, (self, subject,), UpdateDict) 73 75 self.UpdateObserversEx(UpdateDict) 74 76 … … 78 80 def __init__(self, JabberClient, ReplyCallback): 79 81 iqQueryBase.__init__(self, JabberClient) 80 self.ReplyCallback = ReplyCallback82 self.ReplyCallback = BindCallable(ReplyCallback) 81 83 82 def Update(self, subject, UpdateDict):84 def Update(self, subject, **UpdateDict): 83 85 # Notify our callback 84 iqQueryBase.Update(self, subject, UpdateDict)85 self.ReplyCallback(subject, UpdateDict)86 apply(iqQueryBase.Update, (self, subject,), UpdateDict) 87 apply(self.ReplyCallback, (subject,), UpdateDict) 86 88 trunk/RBJabber/RBJabber/iqResponse.py
r53 r65 4 4 5 5 import weakref 6 from Foundation.SubjectObserver.Observer import Observer 7 from Foundation.WeakBind import BindCallable 6 8 from xml.sax.saxutils import escape, quoteattr 7 9 … … 13 15 def __init__(self, JabberClient): 14 16 self.JC = weakref.ref(JabberClient) 17 self._observer = Observer(self.Update, self.Bid) 15 18 16 def Bid(self, subject, UpdateDict):19 def Bid(self, subject, **UpdateDict): 17 20 iq = UpdateDict.get('iq', None) 18 21 if iq: … … 25 28 return 0 26 29 27 def Update(self, subject, UpdateDict):30 def Update(self, subject, **UpdateDict): 28 31 pass 29 32 … … 39 42 self._SelfLink(1) 40 43 # Lets observer the jabber stream 41 self.JC().stream.AddObserver('iq', self )44 self.JC().stream.AddObserver('iq', self._observer) 42 45 self.JC().SupportedNS.append(nsQuery) 43 46 # Setup our match attributes … … 51 54 def __init__(self, JabberClient, ReplyCallback): 52 55 iqResponseBase.__init__(self, JabberClient) 53 self.ReplyCallback = ReplyCallback56 self.ReplyCallback = BindCallable(ReplyCallback) 54 57 55 def Update(self, subject, UpdateDict):58 def Update(self, subject, **UpdateDict): 56 59 # Notify our callback 57 self.ReplyCallback(subject, 'iq', UpdateDict['iq'])60 apply(self.ReplyCallback, (subject,), UpdateDict) 58 61 59 62 trunk/RBJabber/RBJabber/iqRosterQuery.py
r59 r65 5 5 import weakref 6 6 from xml.sax.saxutils import escape, quoteattr 7 from Foundation.SubjectObserver.Observer import Observer 7 8 from iqQuery import iqQueryBase, Subject 8 9 from JID import * … … 16 17 iqQueryBase.__init__(self, JabberClient) 17 18 Subject.__init__(self) 18 self.JC().stream.AddObserver('iq', self) 19 self._observer = Observer(self.Update, self.Bid) 20 self.JC().stream.AddObserver('iq', self._observer) 19 21 self.JC().SendXML('''<iq type='get'><query xmlns='jabber:iq:roster'/></iq>''') 20 22 self.ByJID = {} 21 23 22 def Bid(self, subject, UpdateDict):24 def Bid(self, subject, **UpdateDict): 23 25 iq = UpdateDict.get('iq', None) 24 26 if iq: … … 28 30 return -1 29 31 30 def Update(self, subject, UpdateDict):32 def Update(self, subject, **UpdateDict): 31 33 iq = UpdateDict['iq'] 32 34 for each in iq.query[0].item: trunk/RBJabber/RBJabber/iqTimeResponse.py
r45 r65 15 15 self.AnswerQuery("jabber:iq:time") 16 16 17 def Update(self, subject, UpdateDict):17 def Update(self, subject, **UpdateDict): 18 18 iq = UpdateDict['iq'] 19 19 iq.to = iq.from_ trunk/RBJabber/RBJabber/iqVersionResponse.py
r45 r65 12 12 13 13 class iqVersionResponse(iqResponseBase): 14 def __init__(self, JC, Name, Version ):14 def __init__(self, JC, Name, Version, Bid=1): 15 15 iqResponseBase.__init__(self, JC) 16 16 self.AnswerQuery("jabber:iq:version") 17 17 self.Name = Name 18 18 self.Version = Version 19 self.Bid=1 19 20 20 def Update(self, subject,UpdateDict):21 def __call__(self, subject, **UpdateDict): 21 22 iq = UpdateDict['iq'] 22 23 iq.to = iq.from_ trunk/RBPrivate/Prototypes/ChatClient/ChatMediator.py
r62 r65 8 8 import sha 9 9 from wxPython import wx 10 from Foundation.SubjectObserver.Observer import Observer 10 11 11 12 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 19 20 self.context = node.context 20 21 21 def Update(self, subject, UpdateDict): 22 if 'message' in UpdateDict: 23 message = UpdateDict['message'] 24 if message.type == self._ChatType: 25 strFrom = self.JC().Roster.Get(message.from_) 26 if strFrom: strFrom = getattr(strFrom, 'name', None) 27 if not strFrom: strFrom = message.from_ 28 strBodyText = ''.join([str(x) for x in getattr(message, 'body', [])]) 29 self._AddOutputText(strFrom, strBodyText, 0) 30 self._AddOutputXML(''.join(message._toXML()), 0) 22 def Update(self, subject, message=None, **UpdateDict): 23 if message and message.type == self._ChatType: 24 strFrom = self.JC().Roster.Get(message.from_) 25 if strFrom: strFrom = getattr(strFrom, 'name', None) &nb
