Changeset 9

Show
Ignore:
Timestamp:
02/10/02 17:33:03 (7 years ago)
Author:
sholloway
Message:

Skinning, v1

Files:

Legend:

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

    r8 r9  
    3434        raise self.e_no_class_registered, '%s %s' % (namespace, node) 
    3535 
     36    def _GetOwner(self): 
     37        return self 
     38 
    3639    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) 
    4252        if self._elements: 
    4353            self._elements[-1]._addElement(namespace, node, object) 
     
    5666class XMLBuilder(XMLBuilderMixin): 
    5767    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) 
    5972 
    60     def Parse(self, *args, **kw): 
     73    def _PreParse(self): 
    6174        self._elements, self._LastCompleteElement  = [], None 
    6275        parser = ParserCreate('ASCII', self._seperator) 
     
    6578        parser.EndElementHandler = self._end_element 
    6679        parser.CharacterDataHandler = self._char_data 
    67         apply(parser.Parse, args, kw) 
     80        return parser 
     81  
     82    def _PostParse(self, parser): 
    6883        result, self._LastCompleteElement = self._LastCompleteElement, None 
    6984        return result 
    7085 
     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  
    1414    Build = XMLBuilder.XMLBuilder.Parse 
    1515 
    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) 
    1923        return result 
    2024 
  • trunk/RBFoundation/RBFoundation/XMLObjectify.py

    r8 r9  
    1111 
    1212class _Objectified(object): 
    13     def __init__(self, namespace, node, attributes): 
     13    def __init__(self, owner, parent, namespace, node, attributes): 
    1414        self.__namespace__ = namespace 
    1515        self.__node__ = node 
     
    2424            if xmlName in _attributes: 
    2525                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] 
    2727            if result: 
    2828                return result 
     
    4848         
    4949    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]] 
    5151     
    5252    def __str__(self): 
     
    5454     
    5555    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         
    5859    def _addElement(self, namespace, node, object): 
    59         self._elements.append((namespace, node, object)) 
     60        self._elements.append(((namespace, node), object)) 
    6061        return self._elements[-1] 
    6162 
    6263    def _addData(self, data): 
    63         self._elements.append((self.__namespace__, '', data)) 
     64        self._elements.append(((self.__namespace__, ''), data)) 
    6465 
    6566    def _toXML(self, strSplit='', nsOuter=''): 
     
    7071        if self._elements: 
    7172            result[-1] += '>' 
    72             for ns, node, each in self._elements: 
     73            for tupleNSNode, each in self._elements: 
    7374                if isinstance(each, (str, unicode)): 
    7475                    result.append(escape(each)) 
     
    9192    Objectify = XMLBuilder.XMLBuilder.Parse 
    9293 
    93     def GetElementFactory(self, namespace, node): 
     94    def _GetElementFactory(self, owner, parent, namespace, node, attributes): 
    9495        return self.objectified_class 
    9596 
     
    9899if __name__ == '__main__': 
    99100    from pprint import pprint 
    100     xml = open('qabex.xml', 'r').read(
     101    xml = open('test_objectify.xml', 'r'
    101102    objectifier = Objectifier() 
    102103    obj = objectifier(xml) 
    103104    print repr(obj) 
    104105    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  
    1111 
    1212class JabberNode(XMLObjectify._Objectified): 
    13     def __init__(self, client, namespace, node, attributes): 
     13    def __init__(self, client, parent, namespace, node, attributes): 
    1414        self._client = client 
    15         XMLObjectify._Objectified.__init__(self, namespace, node, attributes) 
     15        XMLObjectify._Objectified.__init__(self, client, parent, namespace, node, attributes) 
    1616 
    1717#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    1818 
    1919class JabberStream(JabberNode): 
    20     def __init__(self, client, namespace, node, attributes): 
    21         JabberNode.__init__(self, client, namespace, node, attributes) 
    22  
    2320    def _xmlInitStarted(self): 
    2421        self._client.stream.settings = self 
  • trunk/RBJabber/RBJabber/JabberConnection.py

    r8 r9  
    44 
    55from Foundation.XMLBuilder import XMLBuilderMixin, XMLBuilderObjectBase, ParserCreate 
    6 from Foundation import SmartSelect, ContextApply 
     6from Foundation import SmartSelect 
    77import socket 
    88import re 
     
    2626 
    2727class JabberNode(XMLBuilderObjectBase): 
    28     def __init__(self, client, namespace, node, attributes): 
    29         XMLBuilderObjectBase.__init__(self, namespace, node, attributes) 
     28    pass 
    3029 
    3130#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    8685    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    8786 
    88     def _GetElementFactory(self, namespace, node, attributes): 
     87    def _GetElementFactory(self, owner, parent, namespace, node, attributes): 
    8988        if len(self._elements) <= 1: 
    9089            result = self.JabberNodeMap.get((namespace, node), self.DefaultJabberNode) 
    9190        else: result = self.DefaultJabberNode 
    92         return ContextApply.ContextApply_s_p(result, self) 
     91        return result 
    9392 
    9493    def _NeedsRead(self): return self._socket and 1 
  • trunk/RBJabber/RBJabber/Test.py

    r8 r9  
    3232    print "Message from %r" % value.from_ 
    3333    for each in value._elements: 
    34         print '%s: %s' % (each[-2], each[-1]) 
     34        print '%s: %s' % (each[0], each[-1]) 
    3535    print 
    3636 
     
    3939    print "Presence from %r" % value.from_ 
    4040    for each in value._elements: 
    41         print '%s: %s' % (each[-2], each[-1]) 
     41        print '%s: %s' % (each[0], each[-1]) 
    4242    print 
    4343 
     
    6363    print jid 
    6464    for resource, presence in pm[jid].iteritems(): 
    65         print '    %s: %s' % (resource, presence.status[0]) 
     65        print '    %s: %s' % (resource, getattr(presence, 'status', [''])[0]) 
    6666