Changeset 104
- Timestamp:
- 04/16/02 09:32:07 (6 years ago)
- Files:
-
- trunk/RBFoundation/RBFoundation/ContextApply.py (modified) (3 diffs)
- trunk/RBFoundation/RBFoundation/WeakBind.py (modified) (2 diffs)
- trunk/RBJabber/RBJabber/JabberSubject.py (modified) (3 diffs)
- trunk/RBJabber/RBJabber/MessageRouter.py (modified) (2 diffs)
- trunk/RBJabber/RBJabber/PresenceMap.py (modified) (1 diff)
- trunk/RBJabber/RBJabber/SubjectObserver/__init__.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/RBFoundation/RBFoundation/ContextApply.py
r88 r104 54 54 def __init__(self, callback, *args, **kw): 55 55 BoundCallable.__init__(self, callback) 56 self._SaveParameters(args, kw) 57 58 def _SaveParameters(self, args, kw): 56 59 self.args = args 57 60 self.kw = kw … … 66 69 67 70 class ContextApply_p(_ContextApply): 71 def _SaveParameters(self, args, kw): pass 68 72 def __call__(self, *args, **kw): 69 73 return self._DoCall(args, kw) … … 74 78 75 79 class ContextApply_0(_ContextApply): 80 def _SaveParameters(self, args, kw): pass 76 81 def __call__(self, *args, **kw): 77 82 return self._DoCall(tuple(), {}) trunk/RBFoundation/RBFoundation/WeakBind.py
r88 r104 44 44 typesRequireBinding = (types.MethodType, types.UnboundMethodType, types.InstanceType) 45 45 46 class BoundCallable(object): 46 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 47 48 class BoundCallableBase(object): 49 pass 50 51 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 52 53 class BoundCallable(BoundCallableBase): 47 54 im_self = None 48 55 … … 80 87 else: return apply(self.im_func, args, kw) 81 88 89 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 82 90 83 91 def BindCallable(callback): 84 if isinstance(callback, BoundCallable): 85 # It's already bound in some form or another 92 if isinstance(callback, BoundCallableBase): 93 # It's already bound in some form or another, 94 # but we have to guard it from being wrapped 95 # again, because it is itself an instance. 86 96 return callback 87 97 elif isinstance(callback, typesRequireBinding): 88 # It's already bound in some form or another 98 # Well if it requires binding, then we should 99 # do so! 89 100 return BoundCallable(callback) 90 101 else: trunk/RBJabber/RBJabber/JabberSubject.py
r95 r104 36 36 37 37 from Foundation.SubjectObserver.CategorySubject import CategorySubjectBaseMixin 38 from Foundation.SubjectObserver import ProxyBidableCategorySubjectMixin 38 39 import JID 39 40 … … 42 43 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 43 44 44 class FromJIDSubjectMixin(CategorySubjectBaseMixin): 45 class JabberSubjectBase(ProxyBidableCategorySubjectMixin, CategorySubjectBaseMixin): 46 pass 47 48 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 49 50 class FromJIDSubjectMixin(JabberSubjectBase): 45 51 def AddObserver(self, category, observer, bUpdate=0): 46 52 super(FromJIDSubjectMixin, self).AddObserver(JID.JID(category), observer, bUpdate) … … 49 55 super(FromJIDSubjectMixin, self).RemoveObserver(JID.JID(category), observer, bUpdate) 50 56 51 def __call__(self, *args, **kw): 52 pass # Weird condition... no bids on it, but we really dont care here 53 54 def Bid(self, subject, **UpdateDict): 55 for value in UpdateDict.itervalues(): 56 for obs in self._ObserverList(value.from_.noresource()): 57 subject._GetBid(obs, UpdateDict) 58 for obs in self._ObserverList(value.from_): 59 subject._GetBid(obs, UpdateDict) 57 def _ProxyObserverList(self, category): 58 result = [] 59 result.extend(self._ObserverList(value.from_.noresource())) 60 result.extend(self._ObserverList(value.from_)) 61 result.extend(super(FromJIDSubjectMixin, self)._ProxyObserverList(category)) 62 return result 60 63 61 64 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trunk/RBJabber/RBJabber/MessageRouter.py
r96 r104 35 35 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 36 36 37 from JabberSubject import FromJIDSubjectMixin 38 from Foundation.SubjectObserver.CategorySubject import CategorySubjectBaseMixin 37 from JabberSubject import FromJIDSubjectMixin, JabberSubjectBase 39 38 40 39 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 48 47 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 49 48 50 class MessageRouterByType( CategorySubjectBaseMixin):49 class MessageRouterByType(JabberSubjectBase): 51 50 def __init__(self, JC): 52 51 JC.stream.AddObserver('message', self) 53 52 54 def Bid(self, subject, **UpdateDict): 55 for value in UpdateDict.itervalues(): 56 for obs in self._ObserverList(value.type): 57 subject._GetBid(obs, UpdateDict) 53 def _ProxyObserverList(self, category): 54 result = [] 55 result.extend(self._ObserverList(value.type)) 56 result.extend(super(MessageRouterByType, self)._ProxyObserverList(category)) 57 return result 58 58 59 59 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 60 60 61 class MessageRouterByID( CategorySubjectBaseMixin):61 class MessageRouterByID(JabberSubjectBase): 62 62 def __init__(self, JC): 63 63 JC.stream.AddObserver('message', self) 64 64 65 def Bid(self, subject, **UpdateDict): 66 for value in UpdateDict.itervalues(): 67 for obs in self._ObserverList(value.id): 68 subject._GetBid(obs, UpdateDict) 65 def _ProxyObserverList(self, category): 66 result = [] 67 result.extend(self._ObserverList(value.id)) 68 result.extend(super(MessageRouterByType, self)._ProxyObserverList(category)) 69 return result 69 70 70 71 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 71 72 72 class MessageRouterByThread(CategorySubjectBaseMixin): 73 class MessageRouter(MessageRouterByFrom, MessageRouterByType, MessageRouterByID): 74 pass 75 76 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 77 78 class MessageRouterByThread(JabberSubjectBase): 73 79 def __init__(self, JC): 74 80 JC.stream.AddObserver('message', self) 75 81 76 def Bid(self, subject, **UpdateDict): 77 for value in UpdateDict.itervalues(): 78 thread = ':'.join(map(str, value.Elements(value='thread'))) 79 for obs in self._ObserverList(thread): 80 subject._GetBid(obs, UpdateDict) 82 def _ProxyObserverList(self, category): 83 result = [] 84 thread = ':'.join(map(str, value.Elements(value='thread'))) 85 result.extend(self._ObserverList(thread)) 86 result.extend(super(MessageRouterByThread, self)._ProxyObserverList(category)) 87 return result 81 88 trunk/RBJabber/RBJabber/PresenceMap.py
r94 r104 86 86 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 87 87 88 class PresenceUpdateMap(PresenceUpdate, PresenceMap ):89 def __init__(self, JC , PresenceMapEntryClass=None):88 class PresenceUpdateMap(PresenceUpdate, PresenceMapMixin): 89 def __init__(self, JC): 90 90 PresenceUpdate.__init__(self, JC) 91 PresenceMap .__init__(self, JC)91 PresenceMapMixin.__init__(self, JC) 92 92 trunk/RBJabber/RBJabber/SubjectObserver/__init__.py
r93 r104 58 58 59 59 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 60 61 class ProxyBidableCategorySubjectMixin(object): 62 def __call__(self, subject, **UpdateDict): 63 pass 64 65 def _ProxyObserverList(self, category): 66 return self._ObserverList(category) 67 68 def Bid(self, subject, **UpdateDict): 69 for value in UpdateDict.itervalues(): 70 for obs in self._ProxyObserverList(value): 71 subject._GetBid(obs, UpdateDict) 72 73 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 74 75 class ProxyBidableSubjectMixin(object): 76 def __call__(self, subject, **UpdateDict): 77 pass 78 79 def _ProxyObserverList(self): 80 return self._ObserverList() 81 82 def Bid(self, subject, **UpdateDict): 83 for obs in self._ProxyObserverList(): 84 subject._GetBid(obs, UpdateDict) 85 86 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 60 87 #~ Testing 61 88 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
