Changeset 433
- Timestamp:
- 01/29/03 19:18:59 (6 years ago)
- Files:
-
- trunk/RBFoundation/RBFoundation/XMLNode.py (modified) (7 diffs)
- trunk/RBTelepathy/RBTelepathy/Connection.py (modified) (1 diff)
- trunk/RBTelepathy/RBTelepathy/Packet/AuthenticationHandler.py (modified) (2 diffs)
- trunk/RBTelepathy/RBTelepathy/Packet/Builder.py (modified) (1 diff)
- trunk/RBTelepathy/RBTelepathy/Packet/Elements.py (modified) (8 diffs)
- trunk/RBTelepathy/RBTelepathy/Packet/ErrorHandler.py (modified) (1 diff)
- trunk/RBTelepathy/RBTelepathy/Packet/MessageHandler.py (modified) (1 diff)
- trunk/RBTelepathy/RBTelepathy/Packet/StreamElements.py (modified) (2 diffs)
- trunk/RBTelepathy/RBTelepathy/Stream/Protocol.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/RBFoundation/RBFoundation/XMLNode.py
r430 r433 56 56 def __ne__(self, other): 57 57 return not self.__eq__(other) 58 59 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 60 61 class 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 58 82 59 83 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 92 116 __slots__ = ['node', 'prefix', 'namespaces', 'elems', 'attrs', 'nodebuilder', 'softspace'] 93 117 nodebuilder = None 118 default_attributes = {} 119 default_namespaces = {} 120 default_elements = [] 121 __xmlattrmixin__ = None 94 122 95 123 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 97 125 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 98 126 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() 103 132 self.node = node 104 133 self.namespace = (prefix, namespace) 105 134 self.softspace = 0 # for compatibility with file-like objects 106 135 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__ 123 144 124 145 def __getitem__(self, key, *args, **kw): … … 391 412 for prefix, ns in self.namespaces.iteritems(): 392 413 if prefix: 393 result.append(' xmlns:%s=%s' % ( self.prefix, xmlquoteattr(ns)))414 result.append(' xmlns:%s=%s' % (prefix, xmlquoteattr(ns))) 394 415 else: result.append(' xmlns=%s' % (xmlquoteattr(ns),)) 395 416 … … 425 446 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 426 447 448 class xmlnodeex(xmlnode, xmlattrmixin): 449 pass 450 451 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 452 427 453 try: import XMLBuilder 428 454 except ImportError: pass … … 430 456 class NodeXML(xmlnode, XMLBuilder.XMLBuilderObjectBase): 431 457 """An adaptor to bridge between XMLBuilderObjectBase class and xmlnode""" 432 __slots__ = () 458 __slots__ = [] 459 433 460 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 438 476 def _addElement(self, node, obj): 439 477 self.elems.append(obj) … … 459 497 if __name__=='__main__': 460 498 print "Testing..." 461 x = xmlnode('root', 'MyRootNamespace' )499 x = xmlnode('root', 'MyRootNamespace', attrlookup=True) 462 500 x += 'Some cdata' 463 501 x += 'subelem', trunk/RBTelepathy/RBTelepathy/Connection.py
r414 r433 55 55 56 56 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) 58 58 59 59 # Lookup our packet handler 60 packethandler = self.RoutedPacketHandlers.get((packet. __namespace__, packet.__node__), None)60 packethandler = self.RoutedPacketHandlers.get((packet.namespace, packet.node), None) 61 61 if packethandler is None: 62 packethandler = self.RoutedPacketHandlers.get((packet. __namespace__, ), None)62 packethandler = self.RoutedPacketHandlers.get((packet.namespace, ), None) 63 63 if packethandler is None: 64 64 packethandler = self.RoutedPacketHandlers.get(None, None) 65 65 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)) 67 67 68 68 return packethandler.OnRoutedPacket(self, packet, *args, **kw) 69 69 70 70 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) 72 72 73 73 # Lookup our packet handler 74 packethandler = self.StreamPacketHandlers.get((packet. __namespace__, packet.__node__), None)74 packethandler = self.StreamPacketHandlers.get((packet.namespace, packet.node), None) 75 75 if packethandler is None: 76 packethandler = self.StreamPacketHandlers.get((packet. __namespace__, ), None)76 packethandler = self.StreamPacketHandlers.get((packet.namespace, ), None) 77 77 if packethandler is None: 78 78 packethandler = self.StreamPacketHandlers.get(None, None) 79 79 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)) 81 81 82 82 return packethandler.OnStreamPacket(self, packet, *args, **kw) trunk/RBTelepathy/RBTelepathy/Packet/AuthenticationHandler.py
r417 r433 66 66 67 67 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') 70 74 try: 71 75 OnAuthType = self._ValidTypes[AuthType] … … 129 133 def _type_response(self, connection, packet, *args, **kw): 130 134 try: 131 simple = packet ._getElements(node='simple')[0]135 simple = packet['simple',][0] 132 136 except (LookupError), e: 133 137 raise ErrorTypes.AuthenticationError('Did not find selected response "simple"') trunk/RBTelepathy/RBTelepathy/Packet/Builder.py
r414 r433 80 80 except StandardError, e: 81 81 # Change these to PacketErrors 82 raise ErrorTypes.PacketError(str(e)) 82 #raise ErrorTypes.PacketError(str(e)) 83 raise 83 84 84 85 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ trunk/RBTelepathy/RBTelepathy/Packet/Elements.py
r415 r433 24 24 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 25 25 26 from RBFoundation.XMLBuilder import XMLBuilderObjectBase 27 from RBFoundation.XMLClassBuilder import XMLClassBuilderObjectMixin 28 from RBFoundation.XMLObjectify import BaseObjectifiedXML, AttributedObjectifiedXML, ObjectifiedXML 29 26 from RBFoundation.XMLProduction import NodeXML 30 27 from RBMBuilder import RBMessagingNamespace 31 28 import URIAddress … … 35 32 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 36 33 37 class PacketElementBase(BaseObjectifiedXML): 34 class PacketElementBase(NodeXML): 35 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 36 #~ Constants / Variables / Etc. 37 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 38 39 __slots__ = ['_owner', 'ElementFactories'] 40 38 41 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 39 42 #~ Public Methods … … 41 44 42 45 def __init__(self, owner, *args, **kw): 43 BaseObjectifiedXML.__init__(self, owner, *args, **kw)46 NodeXML.__init__(self, owner, *args, **kw) 44 47 self._owner = owner 45 48 … … 49 52 def _toXML(self, *args, **kw): 50 53 self.OnUpdateContent() 51 return BaseObjectifiedXML._toXML(self, *args, **kw)54 return NodeXML._toXML(self, *args, **kw) 52 55 53 56 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 54 57 55 class PacketChildElement(PacketElementBase , AttributedObjectifiedXML):58 class PacketChildElement(PacketElementBase): 56 59 pass 57 60 … … 59 62 60 63 class RootElementBase(PacketElementBase): 64 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 65 #~ Constants / Variables / Etc. 66 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 67 68 __slots__ = ['ElementFactories'] 69 70 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 71 #~ Public Methods 72 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 73 61 74 def OnStreamData(self, data, OnPacketComplete=None): 62 75 if OnPacketComplete is not None: … … 128 141 if element is None: 129 142 # Create a new element 130 element = self._addNewElement(self. __namespace__, nodename, klass=URIAddressElement)[-1]143 element = self._addNewElement(self.namespace, nodename, klass=URIAddressElement)[-1] 131 144 element.addr = address 132 145 element._xmlInitStarted() … … 142 155 def OnUpdateContent(self): 143 156 RootElementBase.OnUpdateContent(self) 144 self. _attributes['addr'] = str(self.addr)157 self.attrs['addr'] = str(self.addr) 145 158 146 159 #~ addr property ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 148 161 def _get_addr(self): 149 162 if self._addr is None: 150 self._addr = URIAddress.URIAddress(self. _attributes.get('addr', ''))163 self._addr = URIAddress.URIAddress(self.attrs.get('addr', '')) 151 164 return self._addr 152 165 def _set_addr(self, value): self._addr = value trunk/RBTelepathy/RBTelepathy/Packet/ErrorHandler.py
r415 r433 73 73 74 74 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)) 76 76 trunk/RBTelepathy/RBTelepathy/Packet/MessageHandler.py
r416 r433 88 88 tolist = packet.GetAddresses('to') 89 89 90 self.log.info('Sending "%s" packet to Router', packet. __node__)90 self.log.info('Sending "%s" packet to Router', packet.node) 91 91 if not self.router: 92 92 raise ErrorTypes.RoutingError, 'No router available' 93 93 routecommands = self.router.RoutePacket(packet, tolist) 94 94 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) 96 96 return [routecmd() for routecmd in routecommands] 97 97 else: return () trunk/RBTelepathy/RBTelepathy/Packet/StreamElements.py
r412 r433 62 62 def _xmlInitStarted(self): 63 63 StreamBase._xmlInitStarted(self) 64 self.ContentLen = int(self. _attributes['size'])64 self.ContentLen = int(self.attrs['size']) 65 65 66 66 def OnUpdateContent(self): 67 67 StreamBase.OnUpdateContent(self) 68 self. _attributes['size'] = str(len(self.StreamContent))68 self.attrs['size'] = str(len(self.StreamContent)) 69 69 70 70 def OnStreamData(self, data): … … 97 97 def _xmlInitStarted(self): 98 98 StreamBase._xmlInitStarted(self) 99 self.terminator = chr(int(self. _attributes['ordinal']))99 self.terminator = chr(int(self.attrs['ordinal'])) 100 100 101 101 def OnUpdateContent(self): 102 102 StreamBase.OnUpdateContent(self) 103 self. _attributes['ordinal'] = str(ord(self.terminator))103 self.attrs['ordinal'] = str(ord(self.terminator)) 104 104 105 105 def OnStreamData(self, data): trunk/RBTelepathy/RBTelepathy/Stream/Protocol.py
r414 r433 114 114 if forceshutdown: 115 115 self.stream.shutdown('local') 116 return False 116 117 117 118 def OnStreamPacket(self, packet):
