Exemple #1
0
        def process_element(element_name, children):
            if debug: print "Processing element", element_name
            for tag in children:
                d = OrderedDict()
                for e in tag.children():
                    try:
                        t = e['type'].split(":")
                        if len(t) > 1:
                            ns, type_name = t
                        else:
                            ns, type_name = xsd_ns, t[0]
                        if ns == xsd_ns:
                            # look for the type, None == any
                            fn = REVERSE_TYPE_MAP.get(unicode(type_name), None)
                        else:
                            # complex type, postprocess later
                            fn = elements.setdefault(unicode(type_name),
                                                     OrderedDict())
                        e_name = unicode(e['name'])
                        d[e_name] = fn
                        if e['maxOccurs'] == "unbounded":
                            # it's an array... TODO: compound arrays?
                            d.array = True
                    except:
                        if debug: print sys.exc_info()

                elements.setdefault(element_name, OrderedDict()).update(d)
Exemple #2
0
        def process_element(element_name, children):
            if debug: print "Processing element", element_name
            for tag in children:
                d = OrderedDict()
                for e in tag.children():
                    try:
                        t = e['type'].split(":")
                        if len(t) > 1:
                            ns, type_name = t
                        else:
                            ns, type_name = xsd_ns, t[0]
                        if ns == xsd_ns:
                        # look for the type, None == any
                            fn = REVERSE_TYPE_MAP.get(unicode(type_name), None)
                        else:
                        # complex type, postprocess later
                            fn = elements.setdefault(unicode(type_name), OrderedDict())
                        e_name = unicode(e['name'])
                        d[e_name] = fn
                        if e['maxOccurs'] == "unbounded":
                        # it's an array... TODO: compound arrays?
                            d.array = True
                    except:
                        if debug: print sys.exc_info()

                elements.setdefault(element_name, OrderedDict()).update(d)
Exemple #3
0
 def process_element(element_name, node, element_type):
     "Parse and define simple element types"
     if debug: 
         log.debug("Processing element %s %s" % (element_name, element_type))
     for tag in node:
         if tag.get_local_name() in ("annotation", "documentation"):
             continue
         elif tag.get_local_name() in ('element', 'restriction'):
             if debug: log.debug("%s has not children! %s" % (element_name,tag))
             children = tag # element "alias"?
             alias = True
         elif tag.children():
             children = tag.children()
             alias = False
         else:
             if debug: log.debug("%s has not children! %s" % (element_name,tag))
             continue #TODO: abstract?
         d = OrderedDict()                    
         for e in children:
             t = e['type']
             if not t:
                 t = e['base'] # complexContent (extension)!
             if not t:
                 t = 'anyType' # no type given!
             t = t.split(":")
             if len(t)>1:
                 ns, type_name = t
             else:
                 ns, type_name = None, t[0]
             if element_name == type_name:
                 pass ## warning with infinite recursion
             uri = ns and e.get_namespace_uri(ns) or xsd_uri
             if uri==xsd_uri:
                 # look for the type, None == any
                 fn = REVERSE_TYPE_MAP.get(unicode(type_name), None)
             else:
                 fn = None
             if not fn:
                 # simple / complex type, postprocess later 
                 fn = elements.setdefault(make_key(type_name, "complexType"), OrderedDict())
                 
             if e['name'] is not None and not alias:
                 e_name = unicode(e['name'])
                 d[e_name] = fn
             else:
                 if debug: log.debug("complexConent/simpleType/element %s = %s" % (element_name, type_name))
                 d[None] = fn
             if e['maxOccurs']=="unbounded" or (ns == 'SOAP-ENC' and type_name == 'Array'):
                 # it's an array... TODO: compound arrays?
                 d.array = True
             if e is not None and e.get_local_name() == 'extension' and e.children():
                 # extend base element:
                 process_element(element_name, e.children(), element_type)
         elements.setdefault(make_key(element_name, element_type), OrderedDict()).update(d)
Exemple #4
0
 def process_element(element_name, node):
     "Parse and define simple element types"
     if debug:
         print "Processing element", element_name
     for tag in node:
         if tag.get_local_name() in ("annotation", "documentation"):
             continue
         elif tag.get_local_name() in ("element", "restriction"):
             if debug:
                 print element_name, "has not children!", tag
             children = tag  # element "alias"?
             alias = True
         elif tag.children():
             children = tag.children()
             alias = False
         else:
             if debug:
                 print element_name, "has not children!", tag
             continue  # TODO: abstract?
         d = OrderedDict()
         for e in children:
             t = e["type"]
             if not t:
                 t = e["base"]  # complexContent (extension)!
             if not t:
                 t = "anyType"  # no type given!
             t = t.split(":")
             if len(t) > 1:
                 ns, type_name = t
             else:
                 ns, type_name = None, t[0]
             if element_name == type_name:
                 continue  # prevent infinite recursion
             uri = ns and e.get_namespace_uri(ns) or xsd_uri
             if uri == xsd_uri:
                 # look for the type, None == any
                 fn = REVERSE_TYPE_MAP.get(unicode(type_name), None)
             else:
                 # complex type, postprocess later
                 fn = elements.setdefault(unicode(type_name), OrderedDict())
             if e["name"] is not None and not alias:
                 e_name = unicode(e["name"])
                 d[e_name] = fn
             else:
                 if debug:
                     print "complexConent/simpleType/element", element_name, "=", type_name
                 d[None] = fn
             if e["maxOccurs"] == "unbounded":
                 # it's an array... TODO: compound arrays?
                 d.array = True
             if e is not None and e.get_local_name() == "extension" and e.children():
                 # extend base element:
                 process_element(element_name, e.children())
         elements.setdefault(element_name, OrderedDict()).update(d)
Exemple #5
0
 def process_element(element_name, node):
     "Parse and define simple element types"
     if debug: print "Processing element", element_name
     for tag in node:
         if tag.get_local_name() in ("annotation", "documentation"):
             continue
         elif tag.get_local_name() in ('element', 'restriction'):
             if debug: print element_name, "has not children!", tag
             children = tag  # element "alias"?
             alias = True
         elif tag.children():
             children = tag.children()
             alias = False
         else:
             if debug: print element_name, "has not children!", tag
             continue  #TODO: abstract?
         d = OrderedDict()
         for e in children:
             t = e['type']
             if not t:
                 t = e['base']  # complexContent (extension)!
             if not t:
                 t = 'anyType'  # no type given!
             t = t.split(":")
             if len(t) > 1:
                 ns, type_name = t
             else:
                 ns, type_name = None, t[0]
             if element_name == type_name:
                 continue  # prevent infinite recursion
             uri = ns and e.get_namespace_uri(ns) or xsd_uri
             if uri == xsd_uri:
                 # look for the type, None == any
                 fn = REVERSE_TYPE_MAP.get(unicode(type_name), None)
             else:
                 # complex type, postprocess later
                 fn = elements.setdefault(unicode(type_name),
                                          OrderedDict())
             if e['name'] is not None and not alias:
                 e_name = unicode(e['name'])
                 d[e_name] = fn
             else:
                 if debug:
                     print "complexConent/simpleType/element", element_name, "=", type_name
                 d[None] = fn
             if e['maxOccurs'] == "unbounded":
                 # it's an array... TODO: compound arrays?
                 d.array = True
             if e is not None and e.get_local_name(
             ) == 'extension' and e.children():
                 # extend base element:
                 process_element(element_name, e.children())
         elements.setdefault(element_name, OrderedDict()).update(d)
Exemple #6
0
def process_element(elements, element_name, node, element_type, xsd_uri,
                    dialect):
    """Parse and define simple element types"""

    log.debug("Processing element %s %s" % (element_name, element_type))
    for tag in node:
        if tag.get_local_name() in ("annotation", "documentation"):
            continue
        elif tag.get_local_name() in ('element', 'restriction'):
            log.debug("%s has no children! %s" % (element_name, tag))
            children = tag  # element "alias"?
            alias = True
        elif tag.children():
            children = tag.children()
            alias = False
        else:
            log.debug("%s has no children! %s" % (element_name, tag))
            continue  # TODO: abstract?
        d = OrderedDict()
        for e in children:
            t = e['type']
            if not t:
                t = e['base']  # complexContent (extension)!
            if not t:
                t = 'anyType'  # no type given!
            t = t.split(":")
            if len(t) > 1:
                ns, type_name = t
            else:
                ns, type_name = None, t[0]
            if element_name == type_name:
                pass  ## warning with infinite recursion
            uri = ns and e.get_namespace_uri(ns) or xsd_uri
            if uri == xsd_uri:
                # look for the type, None == any
                fn = REVERSE_TYPE_MAP.get(unicode(type_name), None)
            else:
                fn = None
            if not fn:
                # simple / complex type, postprocess later
                fn = elements.setdefault(make_key(type_name, "complexType"),
                                         OrderedDict())

            if e['maxOccurs'] == "unbounded" or (ns == 'SOAP-ENC'
                                                 and type_name == 'Array'):
                # it's an array... TODO: compound arrays?
                if isinstance(fn, OrderedDict):
                    if len(children) > 1 and dialect in ('jetty', ):
                        # Jetty style support
                        # {'ClassName': [{'attr1': val1, 'attr2': val2}]
                        fn.array = True
                    else:
                        # .NET style support (backward compatibility)
                        # [{'ClassName': {'attr1': val1, 'attr2': val2}]
                        d.array = True
                else:
                    if dialect in ('jetty', ):
                        # scalar support [{'attr1': [val1]}]
                        fn = [fn]
                    else:
                        d.array = True

            if e['name'] is not None and not alias:
                e_name = unicode(e['name'])
                d[e_name] = fn
            else:
                log.debug("complexContent/simpleType/element %s = %s" %
                          (element_name, type_name))
                d[None] = fn
            if e is not None and e.get_local_name(
            ) == 'extension' and e.children():
                # extend base element:
                process_element(elements, element_name, e.children(),
                                element_type, xsd_uri, dialect)
        elements.setdefault(make_key(element_name, element_type),
                            OrderedDict()).update(d)
Exemple #7
0
        def process_element(element_name, node, element_type):
            "Parse and define simple element types"
            if debug: 
                log.debug("Processing element %s %s" % (element_name, element_type))
            if element_name in ("ajusteBase", "LpgAjusteUnifBaseType"):
                pass ##import pdb;pdb.set_trace()
            for tag in node:
                if tag.get_local_name() in ("annotation", "documentation"):
                    continue
                elif tag.get_local_name() in ('element', 'restriction'):
                    if debug: log.debug("%s has not children! %s" % (element_name,tag))
                    children = tag # element "alias"?
                    alias = True
                elif tag.children():
                    children = tag.children()
                    alias = False
                else:
                    if debug: log.debug("%s has not children! %s" % (element_name,tag))
                    continue #TODO: abstract?
                d = OrderedDict()                    
                for e in children:
                    t = e['type']
                    if not t:
                        t = e['base'] # complexContent (extension)!
                    if not t:
                        t = 'anyType' # no type given!
                    t = t.split(":")
                    if len(t)>1:
                        ns, type_name = t
                    else:
                        ns, type_name = None, t[0]
                    if element_name == type_name:
                        pass ## warning with infinite recursion
                    uri = ns and e.get_namespace_uri(ns) or xsd_uri
                    if uri==xsd_uri:
                        # look for the type, None == any
                        fn = REVERSE_TYPE_MAP.get(unicode(type_name), None)
                    else:
                        fn = None
                    if not fn:
                        # simple / complex type, postprocess later 
                        fn = elements.setdefault(make_key(type_name, "complexType"), OrderedDict())

                    if e['maxOccurs']=="unbounded" or (ns == 'SOAP-ENC' and type_name == 'Array'):
                        # it's an array... TODO: compound arrays?
                        if isinstance(fn, OrderedDict):
                            if len(children) > 1 or self.__soap_server in ('jetty', ):
                                # Jetty style support 
                                # {'ClassName': [{'attr1': val1, 'attr2': val2}]  
                                fn.array = True
                            else:
                                # .NET style support (backward compatibility)
                                # [{'ClassName': {'attr1': val1, 'attr2': val2}]  
                                d.array = True
                        else:
                            if self.__soap_server in ('jetty', ):
                                # scalar support [{'attr1': [val1]}]  
                                fn = [fn]
                            else:
                                d.array = True
                        
                    if e['name'] is not None and not alias:
                        e_name = unicode(e['name'])
                        d[e_name] = fn
                    else:
                        if debug: log.debug("complexConent/simpleType/element %s = %s" % (element_name, type_name))
                        d[None] = fn
                    if e is not None and e.get_local_name() == 'extension' and e.children():
                        # extend base element:
                        process_element(element_name, e.children(), element_type)
                elements.setdefault(make_key(element_name, element_type), OrderedDict()).update(d)