Changeset 32

Show
Ignore:
Timestamp:
02/19/02 23:39:40 (7 years ago)
Author:
sholloway
Message:

Updates indeed!

Files:

Legend:

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

    r28 r32  
    6464        return self._elements[-1] 
    6565 
     66    def _addNewElement(self, namespace, node, **attributes): 
     67        namespace = namespace or self.__namespace__ 
     68        return self._addElement(namespace, node, _Objectified(self, self, namespace, node, attributes)) 
     69         
    6670    def _addData(self, data): 
    6771        self._elements.append(((self.__namespace__, ''), data)) 
  • trunk/RBJabber/RBJabber/PresenceMap.py

    r28 r32  
    33#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    44 
    5 from Foundation.Jabber.Base import reJabberJID 
    6 from Foundation import SubjectObserver 
     5import weakref 
    76 
    87#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    98 
    10 class PresenceMap(dict): 
    11     observer = None 
     9class PresenceMap: 
     10    def __init__(self, JC): 
     11        JC.stream.AddObserver('presence', self) 
     12        self.Map = {} 
    1213 
    13     class PresenceSubject(dict, SubjectObserver.Subject): 
    14         def _setPresence(self, resource, presence): 
    15             self[resource] = presence 
    16             apply(self.UpdateObservers, tuple(), {resource: presence}) 
     14    def Update(self, subject, UpdateDict): 
     15        presence = UpdateDict.get('presence', None) 
     16        self.Map[presence.from_] = presence 
    1717 
    18     def AddClient(self, client): 
    19         if not self.observer: 
    20             self.observer = SubjectObserver.AssociativeObserver() 
    21             self.observer.AddAssociation('presence', self._OnPresence) 
    22         client.stream.AddObserver('presence', self.observer) 
    23         return self 
    24  
    25     def _OnPresence(self, ClientStream, strPresnece, presence): 
    26         subject, resource = self.GetPresenceSubject(presence.from_) 
    27         subject[resource] = presence 
    28      
    29     def GetPresenceSubject(self, JID): 
    30         lstJID = reJabberJID.split(JID)[1:-1] 
    31         JIDNoResource = '%s@%s' % tuple(lstJID[:2]) 
    32         resource = '/'.join([x for x in lstJID[2:] if x]) or None 
    33         return self.setdefault(JIDNoResource, self.PresenceSubject()), resource 
    34  
    35     def GetPresence(self, JID): 
    36         subject, resource = self.GetPresenceSubject(JID) 
    37         return subject.get(resource, None) 
    38  
    39  
  • trunk/RBJabber/RBJabber/SubjectObserver/BidableSubject.py

    r30 r32  
    2222        def UpdateObserver(self, observer, UpdateDict): 
    2323            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                 elif priority == self._bids[0]: 
    30                     self._bids[-1].append(observer) 
     24                priority = getattr(observer, 'Bid', None) 
     25                if priority is None: 
     26                    # This client does not payattention to bids...  
     27                    observer.Update(self, UpdateDict) 
     28                else: 
     29                    if callable(priority): 
     30                        priority = priority(self, UpdateDict) 
     31                    if priority: 
     32                        if priority > self._bids[0]: 
     33                            self._bids = priority, [observer] 
     34                        elif priority == self._bids[0]: 
     35                            self._bids[-1].append(observer) 
    3136    return BidableSubjectMixin 
    3237 
  • trunk/RBJabber/RBJabber/Test.py

    r28 r32  
    44from iqQuery import iqQuery 
    55from iqResponse import iqResponse  
     6from iqTimeResponse import iqTimeResponse 
     7from iqVersionResponse import iqVersionResponse 
     8from pprint import pprint 
    69 
    710#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    2528    print 
    2629 
     30def _printAuth(subject, name, value): 
     31    print 
     32    print "Authenticated" 
     33    print 
     34 
    2735def _printBrowse(subject, name, value): 
    2836    print 
     
    3846    print 
    3947 
    40 def _printTime(subject, name, value): 
     48def _printVersion(subject, name, value): 
    4149    print  
    42     print "Time Received!" 
    43     print value._toPrettyXML() 
    44     print 
    45  
    46 def _answerTime(subject, name, value): 
    47     print  
    48     print "Time Requested!" 
     50    print "Version Received!" 
    4951    print value._toPrettyXML() 
    5052    print 
     
    6264 
    6365        strXML = ''.join([('<%s>%s</%s>' % (s[0], s[1], s[0])) for s in dictLogin.iteritems()]) 
    64         iqQuery(jc, _printRoster).SendQuery("jabber:iq:auth", jc.ServerJID, 'set', strXML) 
     66        iqQuery(jc, _printAuth).SendQuery("jabber:iq:auth", jc.ServerJID, 'set', strXML) 
    6567         
    66         process = SmartSelect() 
    6768        obs = SubjectObserver.AssociativeObserver() 
    68         jc.stream.AddObserver('iq', obs) 
    6969        jc.stream.AddObserver('message', obs) 
    7070        jc.stream.AddObserver('presence', obs) 
    71         obs.AddAssociation('iq', _printIQ) 
    7271        obs.AddAssociation('message', _printMessage) 
    7372        obs.AddAssociation('presence', _printPresence) 
     73 
     74        pm = PresenceMap(jc) 
     75 
     76        process = SmartSelect() 
    7477        process.append(jc) 
    7578        for x in xrange(2): process(1) 
    76         #jc.SendXML('''<presence type='available' />''') 
     79        jc.SendXML('''<presence type='available' />''') 
    7780        for x in xrange(2): process(1) 
    7881 
    7982        iqQuery(jc, _printRoster).SendQuery("jabber:iq:roster") 
    80         iqQuery(jc, _printBrowse).SendQuery("jabber:iq:browse"
    81         iqQuery(jc, _printBrowse).SendQuery("jabber:iq:browse", 'shane.holloway@www.runeblade.com/Laptop') 
    82         iqQuery(jc, _printTime).SendQuery("jabber:iq:time", 'shane.holloway@www.runeblade.com/Laptop'
    83         iqResponse(jc, _answerTime).AnswerQuery("jabber:iq:time"
     83        #iqQuery(jc, _printVersion).SendQuery("jabber:iq:version", 'shane.holloway@www.runeblade.com/Laptop'
     84        #iqQuery(jc, _printVersion).SendQuery("jabber:iq:version", 'shane.holloway@myjabber.net') 
     85        iqTimeResponse(jc
     86        iqVersionResponse(jc, 'RuneBlade Foundation Jabber', '0.01'
    8487        while 1: process(1) 
    8588    except KeyboardInterrupt: 
    8689        jc.SendXML('''<presence type="unavailable" />''') 
    8790 
     91    pprint(pm.Map) 
     92 
    8893_test('Python') 
    8994 
  • trunk/RBJabber/RBJabber/iqQuery.py

    r28 r32  
    1010#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    1111 
    12 class iqQuery
    13     def __init__(self, JabberClient, ReplyCallback): 
     12class iqQueryBase
     13    def __init__(self, JabberClient): 
    1414        self.JC = weakref.ref(JabberClient) 
    15         self.ReplyCallback = ReplyCallback  
    1615 
    17     def Update(self, subject, UpdateDict): 
     16    def Bid(self, subject, UpdateDict): 
    1817        iq = UpdateDict.get('iq', None) 
    1918        if iq: 
     
    2726            if bMatch: bMatch = [q for q in iq._elements if q[0][0] == self.nsQuery] and 1 or 0 
    2827            # then we have a match 
    29             if bMatch: 
    30                 # Unhook ourselves 
    31                 self.JC().stream.RemoveObserver(self) 
    32                 # Notify our callback 
    33                 self.ReplyCallback(subject, 'iq', iq) 
    34                 # Unlink our self reference since we are done 
    35                 self._SetLink(0) 
     28            return bMatch and 1 or 0 
     29        return 0 
     30     
     31    def Update(self, subject, UpdateDict): 
     32        # Unhook ourselves 
     33        self.JC().stream.RemoveObserver(self) 
     34        # Unlink our self reference since we are done 
     35        self._SetLink(0) 
    3636 
    3737    def _SetLink(self, bLink): 
     
    6060        self.JC().SendXML(result) 
    6161 
     62#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     63 
     64class iqQuery(iqQueryBase): 
     65    def __init__(self, JabberClient, ReplyCallback): 
     66        iqQueryBase.__init__(self, JabberClient) 
     67        self.ReplyCallback = ReplyCallback  
     68 
     69    def Update(self, subject, UpdateDict): 
     70        # Notify our callback 
     71        self.ReplyCallback(subject, 'iq', UpdateDict['iq']) 
     72        iqQueryBase.Update(self, subject, UpdateDict) 
     73 
  • trunk/RBJabber/RBJabber/iqResponse.py

    r28 r32  
    1010#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    1111 
    12 class iqResponse
    13     def __init__(self, JabberClient, ReplyCallback): 
     12class iqResponseBase
     13    def __init__(self, JabberClient): 
    1414        self.JC = weakref.ref(JabberClient) 
    15         self.ReplyCallback = ReplyCallback  
    1615 
    17     def Update(self, subject, UpdateDict): 
     16    def Bid(self, subject, UpdateDict): 
    1817        iq = UpdateDict.get('iq', None) 
    1918        if iq: 
     
    2322            if bMatch: bMatch = [q for q in iq._elements if q[0][0] == self.nsQuery] and 1 or 0 
    2423            # then we have a match 
    25             if bMatch: 
    26                 # Unhook ourselves 
    27                 self.JC().stream.RemoveObserver(self) 
    28                 # Notify our callback 
    29                 self.ReplyCallback(subject, 'iq', iq) 
     24            return bMatch and 1 or 0 
     25        return 0 
     26 
     27    def Update(self, subject, UpdateDict): 
     28        pass 
    3029 
    3130    def _SelfLink(self, bLink): 
     
    4645        return self 
    4746     
     47#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     48     
     49class iqResponse(iqResponseBase): 
     50    def __init__(self, JabberClient, ReplyCallback): 
     51        iqResponseBase.__init__(self, JabberClient) 
     52        self.ReplyCallback = ReplyCallback  
     53 
     54    def Update(self, subject, UpdateDict): 
     55        # Notify our callback 
     56        self.ReplyCallback(subject, 'iq', UpdateDict['iq']) 
     57 
     58