Changeset 9
- Timestamp:
- 02/10/02 17:33:03 (7 years ago)
- Files:
-
- trunk/RBFoundation/RBFoundation/XMLBuilder.py (modified) (3 diffs)
- trunk/RBFoundation/RBFoundation/XMLClassBuilder.py (modified) (1 diff)
- trunk/RBFoundation/RBFoundation/XMLObjectify.py (modified) (7 diffs)
- trunk/RBFoundation/RBFoundation/test_objectify.xml (added)
- trunk/RBJabber/RBJabber/Client.py (modified) (1 diff)
- trunk/RBJabber/RBJabber/JabberConnection.py (modified) (3 diffs)
- trunk/RBJabber/RBJabber/Test.py (modified) (3 diffs)
- trunk/RBSkinning (added)
- trunk/RBSkinning/RBSkinning (added)
- trunk/RBSkinning/RBSkinning/SkinContext.py (added)
- trunk/RBSkinning/RBSkinning/SkinObject.py (added)
- trunk/RBSkinning/RBSkinning/SkinTest.py (added)
- trunk/RBSkinning/RBSkinning/XMLSkinner.py (added)
- trunk/RBSkinning/RBSkinning/__init__.py (added)
- trunk/RBSkinning/RBSkinning/skin (added)
- trunk/RBSkinning/RBSkinning/skin/__init__.py (added)
- trunk/RBSkinning/RBSkinning/skin/reference.py (added)
- trunk/RBSkinning/RBSkinning/skin/skin.py (added)
- trunk/RBSkinning/RBSkinning/test.skin (added)
- trunk/RBSkinning/RBSkinning/test_inner.skin (added)
- trunk/RBSkinning/RBSkinning/xmlPython (added)
- trunk/RBSkinning/RBSkinning/xmlPython/__init__.py (added)
- trunk/RBSkinning/RBSkinning/xmlPython/evaluate.py (added)
- trunk/RBSkinning/RBSkinning/xmlPython/inline.py (added)
- trunk/RBSkinning/RBSkinning/xmlPython/script.py (added)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/RBFoundation/RBFoundation/XMLBuilder.py
r8 r9 34 34 raise self.e_no_class_registered, '%s %s' % (namespace, node) 35 35 36 def _GetOwner(self): 37 return self 38 36 39 def _start_element(self, name, attributes): 37 idx = max(0, name.rfind(self._seperator)) 38 namespace = name[0:idx] 39 node = name[idx + len(self._seperator):] 40 build_factory = self._GetElementFactory(namespace, node, attributes) 41 object = build_factory(namespace, node, attributes) 40 idx = name.rfind(self._seperator) 41 if idx < 0: 42 namespace = '' 43 node = name 44 else: 45 namespace = name[0:idx] 46 node = name[idx + len(self._seperator):] 47 48 49 args = (self._GetOwner(), self._elements and self._elements[-1] or None, namespace, node, attributes) 50 build_factory = apply(self._GetElementFactory, args) 51 object = apply(build_factory, args) 42 52 if self._elements: 43 53 self._elements[-1]._addElement(namespace, node, object) … … 56 66 class XMLBuilder(XMLBuilderMixin): 57 67 def __call__(self, *args, **kw): 58 return apply(self.Parse, args, kw) 68 if isinstance(args[0], file): 69 return apply(self.ParseFile, args, kw) 70 else: 71 return apply(self.Parse, args, kw) 59 72 60 def Parse(self, *args, **kw):73 def _PreParse(self): 61 74 self._elements, self._LastCompleteElement = [], None 62 75 parser = ParserCreate('ASCII', self._seperator) … … 65 78 parser.EndElementHandler = self._end_element 66 79 parser.CharacterDataHandler = self._char_data 67 apply(parser.Parse, args, kw) 80 return parser 81 82 def _PostParse(self, parser): 68 83 result, self._LastCompleteElement = self._LastCompleteElement, None 69 84 return result 70 85 86 def Parse(self, *args, **kw): 87 parser= self._PreParse() 88 apply(parser.Parse, args, kw) 89 return self._PostParse(parser) 90 91 def ParseFile(self, *args, **kw): 92 parser= self._PreParse() 93 apply(parser.ParseFile, args, kw) 94 return self._PostParse(parser) 95 trunk/RBFoundation/RBFoundation/XMLClassBuilder.py
r8 r9 14 14 Build = XMLBuilder.XMLBuilder.Parse 15 15 16 def GetElementFactory(self, namespace, node): 17 module = __import__(namespace, globals(), {}, [node]) 18 result = getattr(module, node) 16 def _GetModuleClass(self, namespace, node): 17 return namespace, node 18 19 def _GetElementFactory(self, owner, parent, namespace, node, attributes): 20 strModule, strClass = self._GetModuleClass(namespace, node) 21 module = __import__(strModule, globals(), {}, [strClass]) 22 result = getattr(module, strClass) 19 23 return result 20 24 trunk/RBFoundation/RBFoundation/XMLObjectify.py
r8 r9 11 11 12 12 class _Objectified(object): 13 def __init__(self, namespace, node, attributes):13 def __init__(self, owner, parent, namespace, node, attributes): 14 14 self.__namespace__ = namespace 15 15 self.__node__ = node … … 24 24 if xmlName in _attributes: 25 25 return _attributes[xmlName] 26 result = [x[-1] for x in self._elements if x[ -2] == xmlName]26 result = [x[-1] for x in self._elements if x[0][-1] == xmlName] 27 27 if result: 28 28 return result … … 48 48 49 49 def __call__(self): 50 return [x[-1] for x in self._elements if not x[ -2]]50 return [x[-1] for x in self._elements if not x[0][-1]] 51 51 52 52 def __str__(self): … … 54 54 55 55 def __repr__(self): 56 return '%s %r %r>' % (object.__repr__(self)[:-1], self.__namespace__, self.__node__) 57 56 result = object.__repr__(self) 57 return '<%s %r %r>' % (result[1:-1], self.__namespace__, self.__node__) 58 58 59 def _addElement(self, namespace, node, object): 59 self._elements.append(( namespace, node, object))60 self._elements.append(((namespace, node), object)) 60 61 return self._elements[-1] 61 62 62 63 def _addData(self, data): 63 self._elements.append(( self.__namespace__, '', data))64 self._elements.append(((self.__namespace__, ''), data)) 64 65 65 66 def _toXML(self, strSplit='', nsOuter=''): … … 70 71 if self._elements: 71 72 result[-1] += '>' 72 for ns, node, each in self._elements:73 for tupleNSNode, each in self._elements: 73 74 if isinstance(each, (str, unicode)): 74 75 result.append(escape(each)) … … 91 92 Objectify = XMLBuilder.XMLBuilder.Parse 92 93 93 def GetElementFactory(self, namespace, node):94 def _GetElementFactory(self, owner, parent, namespace, node, attributes): 94 95 return self.objectified_class 95 96 … … 98 99 if __name__ == '__main__': 99 100 from pprint import pprint 100 xml = open(' qabex.xml', 'r').read()101 xml = open('test_objectify.xml', 'r') 101 102 objectifier = Objectifier() 102 103 obj = objectifier(xml) 103 104 print repr(obj) 104 105 print ' ~ ' * 20 105 print '\n'.join(obj._toXML()) 106 print ' ~ ' * 20 107 for each in ['%10s name: %s' % (name.type, name) for name in obj.history[0].heritage[0].name]: 108 print each 106 print ''.join(obj._toXML()) trunk/RBJabber/RBJabber/Client.py
r8 r9 11 11 12 12 class JabberNode(XMLObjectify._Objectified): 13 def __init__(self, client, namespace, node, attributes):13 def __init__(self, client, parent, namespace, node, attributes): 14 14 self._client = client 15 XMLObjectify._Objectified.__init__(self, namespace, node, attributes)15 XMLObjectify._Objectified.__init__(self, client, parent, namespace, node, attributes) 16 16 17 17 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 18 18 19 19 class JabberStream(JabberNode): 20 def __init__(self, client, namespace, node, attributes):21 JabberNode.__init__(self, client, namespace, node, attributes)22 23 20 def _xmlInitStarted(self): 24 21 self._client.stream.settings = self trunk/RBJabber/RBJabber/JabberConnection.py
r8 r9 4 4 5 5 from Foundation.XMLBuilder import XMLBuilderMixin, XMLBuilderObjectBase, ParserCreate 6 from Foundation import SmartSelect , ContextApply6 from Foundation import SmartSelect 7 7 import socket 8 8 import re … … 26 26 27 27 class JabberNode(XMLBuilderObjectBase): 28 def __init__(self, client, namespace, node, attributes): 29 XMLBuilderObjectBase.__init__(self, namespace, node, attributes) 28 pass 30 29 31 30 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 86 85 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 87 86 88 def _GetElementFactory(self, namespace, node, attributes):87 def _GetElementFactory(self, owner, parent, namespace, node, attributes): 89 88 if len(self._elements) <= 1: 90 89 result = self.JabberNodeMap.get((namespace, node), self.DefaultJabberNode) 91 90 else: result = self.DefaultJabberNode 92 return ContextApply.ContextApply_s_p(result, self)91 return result 93 92 94 93 def _NeedsRead(self): return self._socket and 1 trunk/RBJabber/RBJabber/Test.py
r8 r9 32 32 print "Message from %r" % value.from_ 33 33 for each in value._elements: 34 print '%s: %s' % (each[ -2], each[-1])34 print '%s: %s' % (each[0], each[-1]) 35 35 print 36 36 … … 39 39 print "Presence from %r" % value.from_ 40 40 for each in value._elements: 41 print '%s: %s' % (each[ -2], each[-1])41 print '%s: %s' % (each[0], each[-1]) 42 42 print 43 43 … … 63 63 print jid 64 64 for resource, presence in pm[jid].iteritems(): 65 print ' %s: %s' % (resource, presence.status[0])65 print ' %s: %s' % (resource, getattr(presence, 'status', [''])[0]) 66 66
