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)
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)
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)
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)
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)
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)