Changeset 433

Show
Ignore:
Timestamp:
01/29/03 19:18:59 (6 years ago)
Author:
sholloway
Message:

*** empty log message ***

Files:

Legend:

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

    r430 r433  
    5656    def __ne__(self, other): 
    5757        return not self.__eq__(other) 
     58 
     59#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     60 
     61class xmlattrmixin(object): 
     62    def __getattribute__(self, name): 
     63        """Returns self.attrs[name] when possible.  Use explicit self.attrs[name] for more uniform access.""" 
     64        try: 
     65            return object.__getattribute__(self, name) 
     66        except AttributeError: 
     67            if name in self.attrs: 
     68                return self.attrs[name] 
     69            else: raise 
     70 
     71    def __setattr__(self, name, value): 
     72        """Sets self.attrs[name] = value when possible.  Use explicit self.attrs[name] for more uniform access.""" 
     73        try: 
     74            # This works because of the __slots__ definition 
     75            object.__setattr__(self, name, value) 
     76        except AttributeError: 
     77            if name in self.attrs: 
     78                self.attrs[name] = str(value) 
     79            elif not hasattr(self, name): 
     80                self.attrs[name] = str(value) 
     81            else: raise 
    5882 
    5983#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    92116    __slots__ = ['node', 'prefix', 'namespaces', 'elems', 'attrs', 'nodebuilder', 'softspace'] 
    93117    nodebuilder = None 
     118    default_attributes = {} 
     119    default_namespaces = {} 
     120    default_elements = [] 
     121    __xmlattrmixin__ = None 
    94122 
    95123    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    97125    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    98126 
    99     def __init__(self, node, namespace=None, prefix=''): 
    100         self.namespaces = {} 
    101         self.elems = [] 
    102         self.attrs = {} 
     127    def __init__(self, node, namespace=None, prefix='', attrlookup=None): 
     128        self.enableattrlookup(attrlookup) 
     129        self.namespaces = self.default_namespaces.copy() 
     130        self.elems = self.default_elements[:] 
     131        self.attrs = self.default_attributes.copy() 
    103132        self.node = node 
    104133        self.namespace = (prefix, namespace) 
    105134        self.softspace = 0 # for compatibility with file-like objects 
    106135 
    107     def __getattribute__(self, name): 
    108         """Returns self.attrs[name] when possible.  Use explicit self.attrs[name] for more uniform access.""" 
    109         try: 
    110             return object.__getattribute__(self, name) 
    111         except AttributeError: 
    112             if name in self.attrs: 
    113                 return self.attrs[name] 
    114             else: raise 
    115  
    116     def __setattr__(self, name, value): 
    117         """Sets self.attrs[name] = value when possible.  Use explicit self.attrs[name] for more uniform access.""" 
    118         try: 
    119             # This works because of the __slots__ definition 
    120             object.__setattr__(self, name, value) 
    121         except AttributeError: 
    122             self.addattr((name,str(value))) 
     136    def enableattrlookup(self, use=True): 
     137        using = isinstance(self, xmlattrmixin) 
     138        if use is True and not using: 
     139            if self.__class__.__xmlattrmixin__ is None: 
     140                self.__class__.__xmlattrmixin__ = type(self.__class__.__name__ + '*', (self.__class__, xmlattrmixin), {'__slots__':[], '__oldclass__': self.__class__}) 
     141            self.__class__ = self.__class__.__xmlattrmixin__ 
     142        elif use is False and using: 
     143            self.__class__ = self.__oldclass__ 
    123144 
    124145    def __getitem__(self, key, *args, **kw): 
     
    391412        for prefix, ns in self.namespaces.iteritems(): 
    392413            if prefix: 
    393                 result.append(' xmlns:%s=%s' % (self.prefix, xmlquoteattr(ns))) 
     414                result.append(' xmlns:%s=%s' % (prefix, xmlquoteattr(ns))) 
    394415            else: result.append(' xmlns=%s' % (xmlquoteattr(ns),)) 
    395416 
     
    425446#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    426447 
     448class xmlnodeex(xmlnode, xmlattrmixin): 
     449    pass 
     450 
     451#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     452 
    427453try: import XMLBuilder 
    428454except ImportError: pass 
     
    430456    class NodeXML(xmlnode, XMLBuilder.XMLBuilderObjectBase): 
    431457        """An adaptor to bridge between XMLBuilderObjectBase class and xmlnode""" 
    432         __slots__ = () 
     458        __slots__ = [] 
     459 
    433460        def __init__(self, owner, parent, node, attributes, namespacemap): 
    434             xmlnode.__init__(self, node[1], node[0], namespacemap.get(node[0], '')) 
    435             self.addattr(attributes) 
    436             for xmlns, prefix in namespacemap.iteritems(): 
    437                 self.namespaces[prefix] = xmlns 
     461            prefix = namespacemap.source.get(node[0], None) 
     462            if prefix is not None: 
     463                xmlnode.__init__(self, node[1], node[0], prefix) 
     464            else: xmlnode.__init__(self, node[1]) 
     465 
     466            for key, value in attributes.iteritems(): 
     467                if isinstance(key, tuple): 
     468                    prefix = namespacemap.get(key[0]) 
     469                    if not prefix: key = key[1] 
     470                    else: key = '%s:%s' % (prefix, key[1]) 
     471                self.attrs[key] = value 
     472 
     473            for xmlns, prefix in namespacemap.source.iteritems(): 
     474                self.namespaces[prefix or ''] = xmlns 
     475 
    438476        def _addElement(self, node, obj):  
    439477            self.elems.append(obj) 
     
    459497if __name__=='__main__': 
    460498    print "Testing..." 
    461     x = xmlnode('root', 'MyRootNamespace'
     499    x = xmlnode('root', 'MyRootNamespace', attrlookup=True
    462500    x += 'Some cdata' 
    463501    x += 'subelem', 
  • trunk/RBTelepathy/RBTelepathy/Connection.py

    r414 r433  
    5555 
    5656    def OnRoutedPacket(self, packet, *args, **kw): 
    57         self.log.debug('Received Routed packet (%s, %s)', packet.__namespace__, packet.__node__
     57        self.log.debug('Received Routed packet (%s, %s)', packet.namespace, packet.node
    5858 
    5959        # Lookup our packet handler 
    60         packethandler = self.RoutedPacketHandlers.get((packet.__namespace__, packet.__node__), None) 
     60        packethandler = self.RoutedPacketHandlers.get((packet.namespace, packet.node), None) 
    6161        if packethandler is None: 
    62             packethandler = self.RoutedPacketHandlers.get((packet.__namespace__, ), None) 
     62            packethandler = self.RoutedPacketHandlers.get((packet.namespace, ), None) 
    6363        if packethandler is None: 
    6464            packethandler = self.RoutedPacketHandlers.get(None, None) 
    6565        if packethandler is None: 
    66             raise ErrorTypes.RoutedHandlerError("No RoutedPacketHandler for (%s, %s)" % (packet.__namespace__, packet.__node__)) 
     66            raise ErrorTypes.RoutedHandlerError("No RoutedPacketHandler for (%s, %s)" % (packet.namespace, packet.node)) 
    6767 
    6868        return packethandler.OnRoutedPacket(self, packet, *args, **kw) 
    6969 
    7070    def OnStreamPacket(self, packet, *args, **kw): 
    71         self.log.debug('Received Stream packet (%s, %s)', packet.__namespace__, packet.__node__
     71        self.log.debug('Received Stream packet (%s, %s)', packet.namespace, packet.node
    7272 
    7373        # Lookup our packet handler 
    74         packethandler = self.StreamPacketHandlers.get((packet.__namespace__, packet.__node__), None) 
     74        packethandler = self.StreamPacketHandlers.get((packet.namespace, packet.node), None) 
    7575        if packethandler is None: 
    76             packethandler = self.StreamPacketHandlers.get((packet.__namespace__, ), None) 
     76            packethandler = self.StreamPacketHandlers.get((packet.namespace, ), None) 
    7777        if packethandler is None: 
    7878            packethandler = self.StreamPacketHandlers.get(None, None) 
    7979        if packethandler is None: 
    80             raise ErrorTypes.PacketHandlerError("No StreamPacketHandler for (%s, %s)" % (packet.__namespace__, packet.__node__)) 
     80            raise ErrorTypes.PacketHandlerError("No StreamPacketHandler for (%s, %s)" % (packet.namespace, packet.node)) 
    8181 
    8282        return packethandler.OnStreamPacket(self, packet, *args, **kw) 
  • trunk/RBTelepathy/RBTelepathy/Packet/AuthenticationHandler.py

    r417 r433  
    6666 
    6767    def OnStreamPacket(self, connection, packet, *args, **kw): 
    68         self.log.debug('Received auth type=%r packet', packet._attributes.get('type', )) 
    69         AuthType = packet._attributes['type'] 
     68        self.log.debug('Received auth type=%r packet', packet.attrs.get('type', )) 
     69        try: 
     70            AuthType = packet.attrs['type'] 
     71        except KeyError: 
     72            print packet.toxml(True) 
     73            raise ErrorTypes.AuthenticationError('Sequence type not specified') 
    7074        try: 
    7175            OnAuthType = self._ValidTypes[AuthType] 
     
    129133    def _type_response(self, connection, packet, *args, **kw): 
    130134        try: 
    131             simple = packet._getElements(node='simple')[0] 
     135            simple = packet['simple',][0] 
    132136        except (LookupError), e: 
    133137            raise ErrorTypes.AuthenticationError('Did not find selected response "simple"') 
  • trunk/RBTelepathy/RBTelepathy/Packet/Builder.py

    r414 r433  
    8080        except StandardError, e: 
    8181            # Change these to PacketErrors 
    82             raise ErrorTypes.PacketError(str(e)) 
     82            #raise ErrorTypes.PacketError(str(e)) 
     83            raise 
    8384 
    8485    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
  • trunk/RBTelepathy/RBTelepathy/Packet/Elements.py

    r415 r433  
    2424#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    2525 
    26 from RBFoundation.XMLBuilder import XMLBuilderObjectBase 
    27 from RBFoundation.XMLClassBuilder import XMLClassBuilderObjectMixin 
    28 from RBFoundation.XMLObjectify import BaseObjectifiedXML, AttributedObjectifiedXML, ObjectifiedXML 
    29  
     26from RBFoundation.XMLProduction import NodeXML 
    3027from RBMBuilder import RBMessagingNamespace 
    3128import URIAddress 
     
    3532#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    3633 
    37 class PacketElementBase(BaseObjectifiedXML): 
     34class PacketElementBase(NodeXML): 
     35    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     36    #~ Constants / Variables / Etc.  
     37    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     38 
     39    __slots__ = ['_owner', 'ElementFactories'] 
     40 
    3841    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    3942    #~ Public Methods  
     
    4144 
    4245    def __init__(self, owner, *args, **kw): 
    43         BaseObjectifiedXML.__init__(self, owner, *args, **kw) 
     46        NodeXML.__init__(self, owner, *args, **kw) 
    4447        self._owner = owner 
    4548         
     
    4952    def _toXML(self, *args, **kw): 
    5053        self.OnUpdateContent() 
    51         return BaseObjectifiedXML._toXML(self, *args, **kw) 
     54        return NodeXML._toXML(self, *args, **kw) 
    5255 
    5356#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    5457 
    55 class PacketChildElement(PacketElementBase, AttributedObjectifiedXML): 
     58class PacketChildElement(PacketElementBase): 
    5659    pass 
    5760 
     
    5962 
    6063class RootElementBase(PacketElementBase): 
     64    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     65    #~ Constants / Variables / Etc.  
     66    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     67 
     68    __slots__ = ['ElementFactories'] 
     69 
     70    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     71    #~ Public Methods  
     72    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     73 
    6174    def OnStreamData(self, data, OnPacketComplete=None): 
    6275        if OnPacketComplete is not None: 
     
    128141            if element is None: 
    129142                # Create a new element 
    130                 element = self._addNewElement(self.__namespace__, nodename, klass=URIAddressElement)[-1] 
     143                element = self._addNewElement(self.namespace, nodename, klass=URIAddressElement)[-1] 
    131144                element.addr = address 
    132145                element._xmlInitStarted() 
     
    142155    def OnUpdateContent(self): 
    143156        RootElementBase.OnUpdateContent(self) 
    144         self._attributes['addr'] = str(self.addr) 
     157        self.attrs['addr'] = str(self.addr) 
    145158 
    146159    #~ addr property ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    148161    def _get_addr(self): 
    149162        if self._addr is None: 
    150             self._addr = URIAddress.URIAddress(self._attributes.get('addr', '')) 
     163            self._addr = URIAddress.URIAddress(self.attrs.get('addr', '')) 
    151164        return self._addr 
    152165    def _set_addr(self, value): self._addr = value 
  • trunk/RBTelepathy/RBTelepathy/Packet/ErrorHandler.py

    r415 r433  
    7373 
    7474    def OnStreamPacket(self, connection, packet, *args, **kw): 
    75         self.log.warn('%s: %s', packet._attributes.get('type', 'UnknownError'), str(packet)) 
     75        self.log.warn('%s: %s', packet.attrs.get('type', 'UnknownError'), str(packet)) 
    7676 
  • trunk/RBTelepathy/RBTelepathy/Packet/MessageHandler.py

    r416 r433  
    8888        tolist = packet.GetAddresses('to') 
    8989 
    90         self.log.info('Sending "%s" packet to Router', packet.__node__
     90        self.log.info('Sending "%s" packet to Router', packet.node
    9191        if not self.router: 
    9292            raise ErrorTypes.RoutingError, 'No router available' 
    9393        routecommands = self.router.RoutePacket(packet, tolist) 
    9494        if routecommands: 
    95             self.log.debug('Sending routed packet "%s" to destination', packet.__node__
     95            self.log.debug('Sending routed packet "%s" to destination', packet.node
    9696            return [routecmd() for routecmd in routecommands] 
    9797        else: return () 
  • trunk/RBTelepathy/RBTelepathy/Packet/StreamElements.py

    r412 r433  
    6262    def _xmlInitStarted(self):  
    6363        StreamBase._xmlInitStarted(self) 
    64         self.ContentLen = int(self._attributes['size']) 
     64        self.ContentLen = int(self.attrs['size']) 
    6565 
    6666    def OnUpdateContent(self): 
    6767        StreamBase.OnUpdateContent(self) 
    68         self._attributes['size'] = str(len(self.StreamContent)) 
     68        self.attrs['size'] = str(len(self.StreamContent)) 
    6969 
    7070    def OnStreamData(self, data): 
     
    9797    def _xmlInitStarted(self):  
    9898        StreamBase._xmlInitStarted(self) 
    99         self.terminator = chr(int(self._attributes['ordinal'])) 
     99        self.terminator = chr(int(self.attrs['ordinal'])) 
    100100 
    101101    def OnUpdateContent(self): 
    102102        StreamBase.OnUpdateContent(self) 
    103         self._attributes['ordinal'] = str(ord(self.terminator)) 
     103        self.attrs['ordinal'] = str(ord(self.terminator)) 
    104104 
    105105    def OnStreamData(self, data): 
  • trunk/RBTelepathy/RBTelepathy/Stream/Protocol.py

    r414 r433  
    114114            if forceshutdown: 
    115115                self.stream.shutdown('local') 
     116        return False 
    116117 
    117118    def OnStreamPacket(self, packet):