1.1 --- a/libxml2dom/soap.py Sat Oct 06 20:46:13 2007 +0000
1.2 +++ b/libxml2dom/soap.py Sat Oct 06 23:48:45 2007 +0000
1.3 @@ -32,7 +32,6 @@
1.4 from libxml2dom.macrolib import *
1.5 from libxml2dom.macrolib import \
1.6 createDocument as Node_createDocument
1.7 -from libxml2dom.rpc import ParameterName, ParameterValue
1.8
1.9 # SOAP-related namespaces.
1.10
1.11 @@ -133,6 +132,45 @@
1.12 ns.update(namespaces or {})
1.13 return libxml2dom.Node.xpath(self, expr, variables, ns)
1.14
1.15 + # All nodes support convenience methods.
1.16 +
1.17 + def convert(self, node):
1.18 + return node.textContent.strip()
1.19 +
1.20 + def _contents(self):
1.21 + if not self.xpath("*"):
1.22 + return (self.localName, getattr(self.ownerDocument, "convert", self.convert)(self))
1.23 + else:
1.24 + return self
1.25 +
1.26 + def __len__(self):
1.27 + children = self.xpath("*")
1.28 + if not children:
1.29 + return 2
1.30 + else:
1.31 + return len(children)
1.32 +
1.33 + def __getitem__(self, i):
1.34 + children = self.xpath("*")
1.35 + if not children:
1.36 + return self.contents[i]
1.37 + else:
1.38 + return self.xpath("*")[i]
1.39 +
1.40 + def __eq__(self, other):
1.41 + children = self.xpath("*")
1.42 + if children:
1.43 + for i, j in map(None, self, other):
1.44 + if i != j:
1.45 + return False
1.46 + return True
1.47 + elif hasattr(other, "contents"):
1.48 + return self.contents == other.contents
1.49 + else:
1.50 + return self.contents == other
1.51 +
1.52 + contents = property(_contents)
1.53 +
1.54 class SOAPDocument(libxml2dom._Document, SOAPNode):
1.55
1.56 "A SOAP document fragment."
1.57 @@ -214,7 +252,7 @@
1.58 def _resultParameterValue(self):
1.59 if self.resultParameter:
1.60 name = self.resultParameter.textContent.strip()
1.61 - result = self.xpath(".//%s" % name, namespaces={self.prefix : self.namespaceURI})
1.62 + result = self.xpath(".//" + name, namespaces={self.prefix : self.namespaceURI})
1.63 if result:
1.64 return result[0].textContent.strip()
1.65 else:
1.66 @@ -222,61 +260,13 @@
1.67 else:
1.68 return None
1.69
1.70 - def _parameters(self):
1.71 - return self.xpath("*")
1.72 -
1.73 def _parameterValues(self):
1.74 - values = []
1.75 - for parameter in self.parameters:
1.76 - values.append(self._get_value(parameter))
1.77 - return values
1.78 -
1.79 - def _setParameterValues(self, parameters):
1.80 - for node in self.parameters:
1.81 - self.removeChild(node)
1.82 -
1.83 - # Add the parameter values.
1.84 -
1.85 - for parameter in parameters:
1.86 - self._add_value(self, parameter)
1.87 -
1.88 - # Internal methods.
1.89 -
1.90 - def _add_value(self, value, parameter):
1.91 -
1.92 - "Add to the 'value' element the given 'parameter'."
1.93 -
1.94 - container = self.ownerDocument.createElementNS(parameter.name.ns, parameter.name.name)
1.95 - value.appendChild(container)
1.96 - if isinstance(parameter.value, (list, dict)):
1.97 - if isinstance(parameter.value, dict):
1.98 - items = parameter.value.items()
1.99 - else:
1.100 - items = parameter.value
1.101 - for item in items:
1.102 - self._add_value(container, item)
1.103 - else:
1.104 - text = self.ownerDocument.createTextNode(unicode(parameter.value))
1.105 - container.appendChild(text)
1.106 -
1.107 - def _get_value(self, parameter):
1.108 -
1.109 - "Return the parameter name and value from within the given 'parameter'."
1.110 -
1.111 - elements = parameter.xpath("*")
1.112 - if elements:
1.113 - items = []
1.114 - for element in elements:
1.115 - items.append(self._get_value(element))
1.116 - return ParameterValue(ParameterName(parameter.namespaceURI, parameter.name), items)
1.117 - else:
1.118 - return ParameterValue(ParameterName(parameter.namespaceURI, parameter.name), parameter.textContent.strip())
1.119 + return [value.contents for value in self.xpath("*")]
1.120
1.121 methodName = property(_methodName)
1.122 resultParameter = property(_resultParameter)
1.123 resultParameterValue = property(_resultParameterValue)
1.124 - parameters = property(_parameters)
1.125 - parameterValues = property(_parameterValues, _setParameterValues)
1.126 + parameterValues = property(_parameterValues)
1.127
1.128 class SOAPFaultElement(SOAPNode):
1.129