Changeset 104

Show
Ignore:
Timestamp:
04/16/02 09:32:07 (6 years ago)
Author:
sholloway
Message:

*** empty log message ***

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/RBFoundation/RBFoundation/ContextApply.py

    r88 r104  
    5454    def __init__(self, callback, *args, **kw): 
    5555        BoundCallable.__init__(self, callback) 
     56        self._SaveParameters(args, kw) 
     57 
     58    def _SaveParameters(self, args, kw): 
    5659        self.args = args 
    5760        self.kw = kw 
     
    6669 
    6770class ContextApply_p(_ContextApply): 
     71    def _SaveParameters(self, args, kw): pass 
    6872    def __call__(self, *args, **kw): 
    6973        return self._DoCall(args, kw) 
     
    7478 
    7579class ContextApply_0(_ContextApply): 
     80    def _SaveParameters(self, args, kw): pass 
    7681    def __call__(self, *args, **kw): 
    7782        return self._DoCall(tuple(), {}) 
  • trunk/RBFoundation/RBFoundation/WeakBind.py

    r88 r104  
    4444typesRequireBinding = (types.MethodType, types.UnboundMethodType, types.InstanceType) 
    4545 
    46 class BoundCallable(object): 
     46#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     47 
     48class BoundCallableBase(object): 
     49    pass 
     50 
     51#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     52 
     53class BoundCallable(BoundCallableBase): 
    4754    im_self = None 
    4855 
     
    8087        else: return apply(self.im_func, args, kw) 
    8188 
     89#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    8290 
    8391def 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. 
    8696        return callback 
    8797    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! 
    89100        return BoundCallable(callback) 
    90101    else: 
  • trunk/RBJabber/RBJabber/JabberSubject.py

    r95 r104  
    3636 
    3737from Foundation.SubjectObserver.CategorySubject import CategorySubjectBaseMixin 
     38from Foundation.SubjectObserver import ProxyBidableCategorySubjectMixin 
    3839import JID 
    3940 
     
    4243#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    4344 
    44 class FromJIDSubjectMixin(CategorySubjectBaseMixin): 
     45class JabberSubjectBase(ProxyBidableCategorySubjectMixin, CategorySubjectBaseMixin): 
     46    pass 
     47 
     48#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     49 
     50class FromJIDSubjectMixin(JabberSubjectBase): 
    4551    def AddObserver(self, category, observer, bUpdate=0): 
    4652        super(FromJIDSubjectMixin, self).AddObserver(JID.JID(category), observer, bUpdate) 
     
    4955        super(FromJIDSubjectMixin, self).RemoveObserver(JID.JID(category), observer, bUpdate) 
    5056 
    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 
    6063 
    6164#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
  • trunk/RBJabber/RBJabber/MessageRouter.py

    r96 r104  
    3535#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    3636 
    37 from JabberSubject import FromJIDSubjectMixin 
    38 from Foundation.SubjectObserver.CategorySubject import CategorySubjectBaseMixin 
     37from JabberSubject import FromJIDSubjectMixin, JabberSubjectBase 
    3938 
    4039#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    4847#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    4948 
    50 class MessageRouterByType(CategorySubjectBaseMixin): 
     49class MessageRouterByType(JabberSubjectBase): 
    5150    def __init__(self, JC): 
    5251        JC.stream.AddObserver('message', self) 
    5352 
    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 
    5858 
    5959#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    6060 
    61 class MessageRouterByID(CategorySubjectBaseMixin): 
     61class MessageRouterByID(JabberSubjectBase): 
    6262    def __init__(self, JC): 
    6363        JC.stream.AddObserver('message', self) 
    6464 
    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 
    6970 
    7071#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    7172 
    72 class MessageRouterByThread(CategorySubjectBaseMixin): 
     73class MessageRouter(MessageRouterByFrom, MessageRouterByType, MessageRouterByID): 
     74    pass 
     75     
     76#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     77 
     78class MessageRouterByThread(JabberSubjectBase): 
    7379    def __init__(self, JC): 
    7480        JC.stream.AddObserver('message', self) 
    7581 
    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 
    8188 
  • trunk/RBJabber/RBJabber/PresenceMap.py

    r94 r104  
    8686#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    8787 
    88 class PresenceUpdateMap(PresenceUpdate, PresenceMap): 
    89     def __init__(self, JC, PresenceMapEntryClass=None): 
     88class PresenceUpdateMap(PresenceUpdate, PresenceMapMixin): 
     89    def __init__(self, JC): 
    9090        PresenceUpdate.__init__(self, JC) 
    91         PresenceMap.__init__(self, JC) 
     91        PresenceMapMixin.__init__(self, JC) 
    9292 
  • trunk/RBJabber/RBJabber/SubjectObserver/__init__.py

    r93 r104  
    5858 
    5959#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     60 
     61class 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 
     75class 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#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    6087#~ Testing  
    6188#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~