From: <bov...@us...> - 2007-05-25 23:03:05
|
Revision: 1384 http://svn.sourceforge.net/pywebsvcs/?rev=1384&view=rev Author: boverhof Date: 2007-05-25 16:03:06 -0700 (Fri, 25 May 2007) Log Message: ----------- updates to ParsedSoap/parsing routines to use element tree. Many unittest work, some currently broken. Modified Paths: -------------- branches/zsi-element-tree/ZSI/TC.py branches/zsi-element-tree/ZSI/TCcompound.py branches/zsi-element-tree/ZSI/__init__.py branches/zsi-element-tree/ZSI/fault.py branches/zsi-element-tree/ZSI/parse.py branches/zsi-element-tree/test/test_t4.py branches/zsi-element-tree/test/test_t5.py branches/zsi-element-tree/test/test_t6.py branches/zsi-element-tree/test/wsdl2py/test_Attributes.py Modified: branches/zsi-element-tree/ZSI/TC.py =================================================================== --- branches/zsi-element-tree/ZSI/TC.py 2007-05-19 00:02:36 UTC (rev 1383) +++ branches/zsi-element-tree/ZSI/TC.py 2007-05-25 23:03:06 UTC (rev 1384) @@ -8,7 +8,7 @@ _find_arraytype, _find_default_namespace, _find_href, _find_encstyle, \ _resolve_prefix, _find_xsi_attr, _find_type, \ _find_xmlns_prefix, _get_element_nsuri_name, _get_idstr, \ - _Node, EvaluateException, \ + EvaluateException, \ _valid_encoding, ParseException from ZSI.wstools.Namespaces import SCHEMA, SOAP @@ -233,8 +233,11 @@ Parameters: elt -- the DOM element being parsed ''' - return self.pname == elt.localName and \ - self.nspname in [None, elt.namespaceURI] +# return self.pname == elt.localName and \ +# self.nspname in [None, elt.namespaceURI] + nspname,pname = _get_element_nsuri_name(elt) + return self.pname == pname and \ + self.nspname == nspname def nilled(self, elt, ps): '''Is the element NIL, and is that okay? @@ -258,20 +261,24 @@ if not _valid_encoding(elt): raise EvaluateException('Invalid encoding', ps.Backtrace(elt)) c = _children(elt) - if mixed is False: - if len(c) == 0: - raise EvaluateException('Value missing', ps.Backtrace(elt)) - for c_elt in c: - if c_elt.nodeType == _Node.ELEMENT_NODE: - raise EvaluateException('Sub-elements in value', - ps.Backtrace(c_elt)) + if mixed is False and len(c): +# if len(c) == 0: +# raise EvaluateException('Value missing', ps.Backtrace(elt)) +# for c_elt in c: +# if c_elt.nodeType == _Node.ELEMENT_NODE: + raise EvaluateException('Sub-elements in value', ps.Backtrace(c[0])) # It *seems* to be consensus that ignoring comments and # concatenating the text nodes is the right thing to do. - return ''.join([E.nodeValue for E in c - if E.nodeType - in [ _Node.TEXT_NODE, _Node.CDATA_SECTION_NODE ]]) +# return ''.join([E.nodeValue for E in c +# if E.nodeType +# in [ _Node.TEXT_NODE, _Node.CDATA_SECTION_NODE ]]) + # ElementTree: need to strip?? + print "ELT: ", elt + print "TEXT: ", elt.text + return elt.text.strip() + def parse_attributes(self, elt, ps): '''find all attributes specified in the attribute_typecode_dict in current element tag, if an attribute is found set it in the Modified: branches/zsi-element-tree/ZSI/TCcompound.py =================================================================== --- branches/zsi-element-tree/ZSI/TCcompound.py 2007-05-19 00:02:36 UTC (rev 1383) +++ branches/zsi-element-tree/ZSI/TCcompound.py 2007-05-25 23:03:06 UTC (rev 1384) @@ -20,8 +20,10 @@ from ZSI.wstools.logging import getLogger as _GetLogger import re, types -_find_arrayoffset = lambda E: E.getAttributeNS(SOAP.ENC, "offset") -_find_arrayposition = lambda E: E.getAttributeNS(SOAP.ENC, "position") +#_find_arrayoffset = lambda E: E.getAttributeNS(SOAP.ENC, "offset") +#_find_arrayposition = lambda E: E.getAttributeNS(SOAP.ENC, "position") +_find_arrayoffset = lambda ET: _find_attrNS(ET, SOAP.ENC, "offset") +_find_arrayposition = lambda ET: _find_attrNS(ET, SOAP.ENC, "position") _offset_pat = re.compile(r'\[[0-9]+\]') _position_pat = _offset_pat Modified: branches/zsi-element-tree/ZSI/__init__.py =================================================================== --- branches/zsi-element-tree/ZSI/__init__.py 2007-05-19 00:02:36 UTC (rev 1383) +++ branches/zsi-element-tree/ZSI/__init__.py 2007-05-25 23:03:06 UTC (rev 1384) @@ -144,7 +144,7 @@ ## ## Stuff imported from elsewhere. -from xml.dom import Node as _Node +#from xml.dom import Node as _Node import types as _types ## @@ -161,19 +161,27 @@ ## ## Low-level DOM oriented utilities; useful for typecode implementors. -_attrs = lambda E: (E.attributes and E.attributes.values()) or [] -_children = lambda E: E.childNodes or [] -_child_elements = lambda E: [ n for n in (E.childNodes or []) - if n.nodeType == _Node.ELEMENT_NODE ] +#_attrs = lambda E: (E.attributes and E.attributes.values()) or [] +#_children = lambda E: E.childNodes or [] +#_child_elements = lambda E: [ n for n in (E.childNodes or []) +# if n.nodeType == _Node.ELEMENT_NODE ] +_attrs = lambda ET: ET.attrib.values() +_children = lambda ET: [] + ET.getchildren() + [ET.text] #ETREE: No logical equivalent? +_child_elements = lambda ET: ET.getchildren() + ## ## Stuff imported from elsewhere. from ZSI.wstools.Namespaces import SOAP as _SOAP, SCHEMA as _SCHEMA, XMLNS as _XMLNS ## ## Low-level DOM oriented utilities; useful for typecode implementors. -_find_arraytype = lambda E: E.getAttributeNS(_SOAP.ENC, "arrayType") -_find_encstyle = lambda E: E.getAttributeNS(_SOAP.ENV, "encodingStyle") +#_find_arraytype = lambda E: E.getAttributeNS(_SOAP.ENC, "arrayType") +#_find_encstyle = lambda E: E.getAttributeNS(_SOAP.ENV, "encodingStyle") +_find_arraytype = lambda ET: ET.get("{%s}arrayType" %_SOAP.ENC) +_find_encstyle = lambda ET: ET.get("{%s}encodingStyle" %_SOAP.ENV) + + try: from xml.dom import EMPTY_NAMESPACE _empty_nsuri_list = [ EMPTY_NAMESPACE ] @@ -181,56 +189,85 @@ #if None not in _empty_nsuri_list: __empty_nsuri_list.append(None) except: _empty_nsuri_list = [ None, '' ] -def _find_attr(E, attr): - for nsuri in _empty_nsuri_list: - try: - v = E.getAttributeNS(nsuri, attr) - if v: return v - except: pass - return None + + +def _find_attr(ET, attr): +# for nsuri in _empty_nsuri_list: +# try: +# v = E.getAttributeNS(nsuri, attr) +# if v: return v +# except: pass +# return None + return ET.get(attr) -def _find_attrNS(E, namespaceURI, localName): + + +def _find_attrNS(ET, namespaceURI, localName): '''namespaceURI localName ''' - try: - v = E.getAttributeNS(namespaceURI, localName) - if v: return v - except: pass - return None +# try: +# v = E.getAttributeNS(namespaceURI, localName) +# if v: return v +# except: pass +# return None + return ET.get("{%s}%s" %(namespaceURI,localName)) -def _find_attrNodeNS(E, namespaceURI, localName): +def _find_attrNodeNS(ET, namespaceURI, localName): '''Must grab the attribute Node to distinquish between an unspecified attribute(None) and one set to empty string(""). namespaceURI localName ''' - attr = E.getAttributeNodeNS(namespaceURI, localName) - if attr is None: return None - try: - return attr.value - except: pass - return E.getAttributeNS(namespaceURI, localName) +# attr = E.getAttributeNodeNS(namespaceURI, localName) +# if attr is None: return None +# try: +# return attr.value +# except: pass +# return E.getAttributeNS(namespaceURI, localName) + return _find_attrNS(ET, namespaceURI, localName) + + _find_href = lambda E: _find_attr(E, "href") -_find_xsi_attr = lambda E, attr: \ - E.getAttributeNS(_SCHEMA.XSI3, attr) \ - or E.getAttributeNS(_SCHEMA.XSI1, attr) \ - or E.getAttributeNS(_SCHEMA.XSI2, attr) +#_find_xsi_attr = lambda E, attr: \ +# E.getAttributeNS(_SCHEMA.XSI3, attr) \ +# or E.getAttributeNS(_SCHEMA.XSI1, attr) \ +# or E.getAttributeNS(_SCHEMA.XSI2, attr) +_find_xsi_attr = lambda ET, attr:\ + _find_attrNS(ET, _SCHEMA.XSI3, attr) \ + or _find_attrNS(ET, _SCHEMA.XSI1, attr) \ + or _find_attrNS(ET, _SCHEMA.XSI2, attr) + _find_type = lambda E: _find_xsi_attr(E, "type") -_find_xmlns_prefix = lambda E, attr: E.getAttributeNS(_XMLNS.BASE, attr) -_find_default_namespace = lambda E: E.getAttributeNS(_XMLNS.BASE, None) +#_find_xmlns_prefix = lambda E, attr: E.getAttributeNS(_XMLNS.BASE, attr) +#_find_default_namespace = lambda E: E.getAttributeNS(_XMLNS.BASE, None) +_find_xmlns_prefix = lambda ET, attr: _find_attrNS(_XMLNS.BASE, attr) +def _find_default_namespace(ET): + raise NotImplementedError( + "ElementTree API Extension ???" + ) -#_textprotect = lambda s: s.replace('&', '&').replace('<', '<') -_get_element_nsuri_name = lambda E: (E.namespaceURI, E.localName) +#_get_element_nsuri_name = lambda E: (E.namespaceURI, E.localName) +def _get_element_nsuri_name(ET): + idx = ET.tag.find('{') + if idx<0: + return (None, ET.tag) + + return tuple(ET.tag[idx+1:].split('}')) + -_is_element = lambda E: E.nodeType == _Node.ELEMENT_NODE +#_is_element = lambda E: E.nodeType == _Node.ELEMENT_NODE +def _is_element(ET): + raise NotImplementedError( + 'ElementTree API: Irrelevant' + ) def _resolve_prefix(celt, prefix): '''resolve prefix to a namespaceURI. If None or @@ -240,19 +277,22 @@ celt -- element node prefix -- xmlns:prefix, or empty str or None ''' - namespace = None - while _is_element(celt): - if prefix: - namespaceURI = _find_xmlns_prefix(celt, prefix) - else: - namespaceURI = _find_default_namespace(celt) - if namespaceURI: break - celt = celt.parentNode - else: - if prefix: - raise EvaluateException, 'cant resolve xmlns:%s' %prefix - return namespaceURI - +# namespace = None +# while _is_element(celt): +# if prefix: +# namespaceURI = _find_xmlns_prefix(celt, prefix) +# else: +# namespaceURI = _find_default_namespace(celt) +# if namespaceURI: break +# celt = celt.parentNode +# else: +# if prefix: +# raise EvaluateException, 'cant resolve xmlns:%s' %prefix +# return namespaceURI + raise NotImplementedError( + "ElementTree API Extension ???" + ) + def _valid_encoding(elt): '''Does this node have a valid encoding? ''' @@ -271,20 +311,24 @@ '''Return a "backtrace" from the given element to the DOM root, in XPath syntax. ''' - s = '' - while elt != dom: - name, parent = elt.nodeName, elt.parentNode - if parent is None: break - matches = [ c for c in _child_elements(parent) - if c.nodeName == name ] - if len(matches) == 1: - s = '/' + name + s - else: - i = matches.index(elt) + 1 - s = ('/%s[%d]' % (name, i)) + s - elt = parent - return s +# s = '' +# while elt != dom: +# name, parent = elt.nodeName, elt.parentNode +# if parent is None: break +# matches = [ c for c in _child_elements(parent) +# if c.nodeName == name ] +# if len(matches) == 1: +# s = '/' + name + s +# else: +# i = matches.index(elt) + 1 +# s = ('/%s[%d]' % (name, i)) + s +# elt = parent +# return s + return "Sorry no backtrace: ElementTree API Extension ???" + + + def _get_idstr(pyobj): '''Python 2.3.x generates a FutureWarning for negative IDs, so we use a different prefix character to ensure uniqueness, and Modified: branches/zsi-element-tree/ZSI/fault.py =================================================================== --- branches/zsi-element-tree/ZSI/fault.py 2007-05-19 00:02:36 UTC (rev 1383) +++ branches/zsi-element-tree/ZSI/fault.py 2007-05-25 23:03:06 UTC (rev 1384) @@ -4,7 +4,7 @@ ''' from ZSI import _copyright, _children, _child_elements, \ - _get_idstr, _stringtypes, _seqtypes, _Node, SoapWriter, ZSIException + _get_idstr, _stringtypes, _seqtypes, SoapWriter, ZSIException from ZSI.TCcompound import Struct from ZSI.TC import QName, URI, String, XMLString, AnyElement, UNBOUNDED Modified: branches/zsi-element-tree/ZSI/parse.py =================================================================== --- branches/zsi-element-tree/ZSI/parse.py 2007-05-19 00:02:36 UTC (rev 1383) +++ branches/zsi-element-tree/ZSI/parse.py 2007-05-25 23:03:06 UTC (rev 1384) @@ -2,21 +2,28 @@ # $Header$ '''SOAP messaging parsing. ''' - +from xml import etree +from xml.etree import ElementTree from ZSI import _copyright, _children, _attrs, _child_elements, _stringtypes, \ _backtrace, EvaluateException, ParseException, _valid_encoding, \ - _Node, _find_attr, _resolve_prefix + _find_attr, _resolve_prefix, _get_element_nsuri_name from ZSI.TC import AnyElement import types from ZSI.wstools.Namespaces import SOAP, XMLNS from ZSI.wstools.Utility import SplitQName -_find_actor = lambda E: E.getAttributeNS(SOAP.ENV, "actor") or None -_find_mu = lambda E: E.getAttributeNS(SOAP.ENV, "mustUnderstand") -_find_root = lambda E: E.getAttributeNS(SOAP.ENC, "root") -_find_id = lambda E: _find_attr(E, 'id') +#_find_actor = lambda E: E.getAttributeNS(SOAP.ENV, "actor") or None +#_find_mu = lambda E: E.getAttributeNS(SOAP.ENV, "mustUnderstand") +#_find_root = lambda E: E.getAttributeNS(SOAP.ENC, "root") +#_find_id = lambda E: _find_attr(E, 'id') +_find_actor = lambda ET: ET.attrib.get("{%s}%s" %(SOAP.ENV, "actor")) +_find_mu = lambda ET: ET.attrib.get("{%s}%s" %(SOAP.ENV, "mustUnderstand")) +_find_root = lambda ET: ET.attrib.get("{%s}%s" %(SOAP.ENV, "root")) +_find_id = lambda ET: ET.attrib.get("{%s}%s" %(SOAP.ENV, "id")) + + class ParsedSoap: '''A Parsed SOAP object. Convert the text to a DOM tree and parse SOAP elements. @@ -32,7 +39,7 @@ data_elements -- list of non-root elements in the SOAP Body trailer_elements -- list of elements following the SOAP body ''' - defaultReaderClass = None + defaultReaderClass = staticmethod(ElementTree.XML) def __init__(self, input, readerclass=None, keepdom=False, trailers=False, resolver=None, envelope=True, **kw): @@ -45,20 +52,21 @@ envelope -- look for a SOAP envelope. ''' - self.readerclass = readerclass self.keepdom = keepdom - if not self.readerclass: + if not readerclass: if self.defaultReaderClass != None: - self.readerclass = self.defaultReaderClass - else: - from xml.dom.ext.reader import PyExpat - self.readerclass = PyExpat.Reader + readerclass = self.defaultReaderClass +# else: +# from xml.dom.ext.reader import PyExpat +# readerclass = PyExpat.Reader try: - self.reader = self.readerclass() +# self.reader = readerclass() if type(input) in _stringtypes: - self.dom = self.reader.fromString(input) +# self.dom = self.reader.fromString(input) + self.dom = readerclass(input) else: - self.dom = self.reader.fromStream(input) +# self.dom = self.reader.fromStream(input) + self.dom = readerclass(input.read()) except Exception, e: # Is this in the header? Your guess is as good as mine. #raise ParseException("Can't parse document (" + \ @@ -75,47 +83,64 @@ self.trailers, self.resolver, self.id_cache = trailers, resolver, {} # Exactly one child element - c = [ E for E in _children(self.dom) - if E.nodeType == _Node.ELEMENT_NODE] - if len(c) == 0: - raise ParseException("Document has no Envelope", 0) - if len(c) != 1: - raise ParseException("Document has extra child elements", 0) +# c = [ E for E in _children(self.dom) +# if E.nodeType == _Node.ELEMENT_NODE] + elt = self.dom + #if len(c) == 0: + # raise ParseException("Document has no Envelope", 0) + #if len(c) != 1: + # raise ParseException("Document has extra child elements", 0) if envelope is False: - self.body_root = c[0] + self.body_root = elt return # And that one child must be the Envelope - elt = c[0] - if elt.localName != "Envelope" \ - or elt.namespaceURI != SOAP.ENV: - raise ParseException('Document has "' + elt.localName + \ +# if elt.localName != "Envelope" \ +# or elt.namespaceURI != SOAP.ENV: +# raise ParseException('Document has "' + elt.localName + \ +# '" element, not Envelope', 0) + if _get_element_nsuri_name(elt) != (SOAP.ENV, "Envelope"): + print "X: ", _get_element_nsuri_name(elt) != (SOAP.ENV, "Envelope") + print "A: ",_get_element_nsuri_name(elt) + print "V: ",(SOAP.ENV, "Envelope") + raise ParseException('Document has "' + \ + str(_get_element_nsuri_name(elt)) + \ '" element, not Envelope', 0) + self._check_for_legal_children("Envelope", elt) - for a in _attrs(elt): - name = a.nodeName - if name.find(":") == -1 and name not in [ "xmlns", "id" ]: +# for a in _attrs(elt): +# name = a.nodeName +# if name.find(":") == -1 and name not in [ "xmlns", "id" ]: +# raise ParseException('Unqualified attribute "' + \ +# name + '" in Envelope', 0) + for name in elt.keys(): + if name[0] != '{' and name not in [ "xmlns", "id" ]: raise ParseException('Unqualified attribute "' + \ name + '" in Envelope', 0) + self.envelope = elt if not _valid_encoding(self.envelope): raise ParseException("Envelope has invalid encoding", 0) # Get Envelope's child elements. - c = [ E for E in _children(self.envelope) - if E.nodeType == _Node.ELEMENT_NODE ] +# c = [ E for E in _children(self.envelope) +# if E.nodeType == _Node.ELEMENT_NODE ] + c = _child_elements(self.envelope) if len(c) == 0: raise ParseException("Envelope is empty (no Body)", 0) # Envelope's first child might be the header; if so, nip it off. elt = c[0] - if elt.localName == "Header" \ - and elt.namespaceURI == SOAP.ENV: +# if elt.localName == "Header" \ +# and elt.namespaceURI == SOAP.ENV: + if _get_element_nsuri_name(elt) == (SOAP.ENV, "Header"): self._check_for_legal_children("Header", elt) self._check_for_pi_nodes(_children(elt), 1) self.header = c.pop(0) self.header_elements = _child_elements(self.header) + + else: self.header, self.header_elements = None, [] @@ -123,15 +148,16 @@ if len(c) == 0: raise ParseException("Envelope has header but no Body", 0) elt = c.pop(0) - if elt.localName != "Body" \ - or elt.namespaceURI != SOAP.ENV: +# if elt.localName != "Body" \ +# or elt.namespaceURI != SOAP.ENV: + if _get_element_nsuri_name(elt) != (SOAP.ENV, "Body"): if self.header: raise ParseException('Header followed by "' + \ - elt.localName + \ + elt.tag + \ '" element, not Body', 0, elt, self.dom) else: raise ParseException('Document has "' + \ - elt.localName + \ + elt.tag + \ '" element, not Body', 0, elt, self.dom) self._check_for_legal_children("Body", elt, 0) self._check_for_pi_nodes(_children(elt), 0) @@ -149,7 +175,7 @@ else: self.trailer_elements = c for elt in self.trailer_elements: - if not elt.namespaceURI: + if _get_element_nsuri_name(elt)[0] is None: raise ParseException('Unqualified trailer element', 0, elt, self.dom) @@ -189,45 +215,47 @@ if id(E) != rootid ] self._check_for_pi_nodes(self.data_elements, 0) - def __del__(self): - try: - if not self.keepdom: - self.reader.releaseNode(self.dom) - except: - pass +# def __del__(self): +# try: +# if not self.keepdom: +# self.reader.releaseNode(self.dom) +# except: +# pass def _check_for_legal_children(self, name, elt, mustqualify=1): '''Check if all children of this node are elements or whitespace-only text nodes. ''' - inheader = name == "Header" - for n in _children(elt): - t = n.nodeType - if t == _Node.COMMENT_NODE: continue - if t != _Node.ELEMENT_NODE: - if t == _Node.TEXT_NODE and n.nodeValue.strip() == "": - continue - raise ParseException("Non-element child in " + name, - inheader, elt, self.dom) - if mustqualify and not n.namespaceURI: - raise ParseException('Unqualified element "' + \ - n.nodeName + '" in ' + name, inheader, elt, self.dom) +# inheader = name == "Header" +# for n in _children(elt): +# t = n.nodeType +# if t == _Node.COMMENT_NODE: continue +# if t != _Node.ELEMENT_NODE: +# if t == _Node.TEXT_NODE and n.nodeValue.strip() == "": +# continue +# raise ParseException("Non-element child in " + name, +# inheader, elt, self.dom) +# if mustqualify and not n.namespaceURI: +# raise ParseException('Unqualified element "' + \ +# n.nodeName + '" in ' + name, inheader, elt, self.dom) + return def _check_for_pi_nodes(self, list, inheader): '''Raise an exception if any of the list descendants are PI nodes. ''' - list = list[:] - while list: - elt = list.pop() - t = elt.nodeType - if t == _Node.PROCESSING_INSTRUCTION_NODE: - raise ParseException('Found processing instruction "<?' + \ - elt.nodeName + '...>"', - inheader, elt.parentNode, self.dom) - elif t == _Node.DOCUMENT_TYPE_NODE: - raise ParseException('Found DTD', inheader, - elt.parentNode, self.dom) - list += _children(elt) +# list = list[:] +# while list: +# elt = list.pop() +# t = elt.nodeType +# if t == _Node.PROCESSING_INSTRUCTION_NODE: +# raise ParseException('Found processing instruction "<?' + \ +# elt.nodeName + '...>"', +# inheader, elt.parentNode, self.dom) +# elif t == _Node.DOCUMENT_TYPE_NODE: +# raise ParseException('Found DTD', inheader, +# elt.parentNode, self.dom) +# list += _children(elt) + return def Backtrace(self, elt): '''Return a human-readable "backtrace" from the document root to @@ -252,7 +280,8 @@ if headers: list.extend(self.header_elements) while list: e = list.pop() - if e.nodeType == _Node.ELEMENT_NODE: +# if e.nodeType == _Node.ELEMENT_NODE: + if e is not None: nodeid = _find_id(e) if nodeid: self.id_cache[nodeid] = e @@ -288,17 +317,18 @@ element. The dictionaries are cached, and we recurse up the tree as necessary. ''' - d = self.ns_cache.get(id(elt)) - if not d: - if elt != self.dom: d = self.GetElementNSdict(elt.parentNode) - for a in _attrs(elt): - if a.namespaceURI == XMLNS.BASE: - if a.localName == "xmlns": - d[''] = a.nodeValue - else: - d[a.localName] = a.nodeValue - self.ns_cache[id(elt)] = d - return d.copy() +# d = self.ns_cache.get(id(elt)) +# if not d: +# if elt != self.dom: d = self.GetElementNSdict(elt.parentNode) +# for a in _attrs(elt): +# if a.namespaceURI == XMLNS.BASE: +# if a.localName == "xmlns": +# d[''] = a.nodeValue +# else: +# d[a.localName] = a.nodeValue +# self.ns_cache[id(elt)] = d +# return d.copy() + raise NotImplementedError, "ElementTree API: parent Extension??" def GetDomAndReader(self): '''Returns a tuple containing the dom and reader objects. (dom, reader) @@ -314,7 +344,8 @@ ''' e = self.body_root if not e: return 0 - return e.namespaceURI == SOAP.ENV and e.localName == 'Fault' +# return e.namespaceURI == SOAP.ENV and e.localName == 'Fault' + return _get_element_nsuri_name(e) == (SOAP.ENV, 'Fault') def Parse(self, how): '''Parse the message. @@ -326,7 +357,7 @@ '''Return a list of (uri,localname) tuples for all elements in the header that have mustUnderstand set. ''' - return [ ( E.namespaceURI, E.localName ) + return [ _get_element_nsuri_name(E) for E in self.header_elements if _find_mu(E) == "1" ] def WhatActorsArePresent(self): @@ -348,15 +379,18 @@ c, crange = self.header_elements[:], range(len(self.header_elements)) for i,what in [ (i, ofwhat[i]) for i in range(lenofwhat) ]: if isinstance(what, AnyElement): - raise EvaluateException, 'not supporting <any> as child of SOAP-ENC:Header' + raise EvaluateException( + 'not supporting <any> as child of SOAP-ENC:Header' + ) v = [] occurs = 0 namespaceURI,tagName = what.nspname,what.pname for j,c_elt in [ (j, c[j]) for j in crange if c[j] ]: - prefix,name = SplitQName(c_elt.tagName) - nsuri = _resolve_prefix(c_elt, prefix) - if tagName == name and namespaceURI == nsuri: +# prefix,name = SplitQName(c_elt.tagName) +# nsuri = _resolve_prefix(c_elt, prefix) +# if tagName == name and namespaceURI == nsuri: + if _get_element_nsuri_name(c_elt) == (nsuri, name): pyobj = what.parse(c_elt, self) else: continue Modified: branches/zsi-element-tree/test/test_t4.py =================================================================== --- branches/zsi-element-tree/test/test_t4.py 2007-05-19 00:02:36 UTC (rev 1383) +++ branches/zsi-element-tree/test/test_t4.py 2007-05-25 23:03:06 UTC (rev 1384) @@ -2,7 +2,7 @@ import unittest, sys from ZSI import * from ZSI import resolvers -from xml.dom.ext import PrettyPrint +#from xml.dom.ext import PrettyPrint OUT = sys.stdout IN='''<SOAP-ENV:Envelope Modified: branches/zsi-element-tree/test/test_t5.py =================================================================== --- branches/zsi-element-tree/test/test_t5.py 2007-05-19 00:02:36 UTC (rev 1383) +++ branches/zsi-element-tree/test/test_t5.py 2007-05-25 23:03:06 UTC (rev 1384) @@ -3,7 +3,7 @@ from ZSI import * from ZSI import resolvers from xml.dom import Node -from xml.dom.ext.reader import PyExpat +#from xml.dom.ext.reader import PyExpat try: import cStringIO as StringIO except ImportError: Modified: branches/zsi-element-tree/test/test_t6.py =================================================================== --- branches/zsi-element-tree/test/test_t6.py 2007-05-19 00:02:36 UTC (rev 1383) +++ branches/zsi-element-tree/test/test_t6.py 2007-05-25 23:03:06 UTC (rev 1384) @@ -1,7 +1,7 @@ #!/usr/bin/env python import unittest, sys, multifile, mimetools, base64 -from xml.dom import Node -from xml.dom.ext.reader import PyExpat +#from xml.dom import Node +#from xml.dom.ext.reader import PyExpat from ZSI import * from ZSI import resolvers try: Modified: branches/zsi-element-tree/test/wsdl2py/test_Attributes.py =================================================================== --- branches/zsi-element-tree/test/wsdl2py/test_Attributes.py 2007-05-19 00:02:36 UTC (rev 1383) +++ branches/zsi-element-tree/test/wsdl2py/test_Attributes.py 2007-05-25 23:03:06 UTC (rev 1384) @@ -97,6 +97,10 @@ sw = SoapWriter() sw.serialize(pyobj) soap = str(sw) + + print '--'*30 + print soap + print '--'*30 ps = ParsedSoap(soap) pyobj2 = ps.Parse(pyobj.typecode) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |