1.1 --- a/libxml2dom/soap.py Mon Oct 01 23:27:18 2007 +0000
1.2 +++ b/libxml2dom/soap.py Sat Oct 06 19:33:22 2007 +0000
1.3 @@ -32,6 +32,7 @@
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
1.8
1.9 # SOAP-related namespaces.
1.10
1.11 @@ -224,13 +225,13 @@
1.12 def _parameters(self):
1.13 return self.xpath("*")
1.14
1.15 - def _parameterValues(self):
1.16 + def _rawParameterValues(self):
1.17 values = []
1.18 for parameter in self.parameters:
1.19 values.append(self._get_value(parameter))
1.20 return values
1.21
1.22 - def _setParameterValues(self, parameters):
1.23 + def _setRawParameterValues(self, parameters):
1.24 for node in self.parameters:
1.25 self.removeChild(node)
1.26
1.27 @@ -239,38 +240,48 @@
1.28 for parameter in parameters:
1.29 self._add_value(self, parameter)
1.30
1.31 + def _parameterValues(self):
1.32 + return libxml2dom.rpc.convert(self.rawParameterValues, getattr(self.ownerDocument, "converters", None))
1.33 +
1.34 # Internal methods.
1.35
1.36 def _add_value(self, value, parameter):
1.37 - (ns, name), parameter = parameter
1.38 - container = self.ownerDocument.createElementNS(ns, name)
1.39 +
1.40 + "Add to the 'value' element the given 'parameter'."
1.41 +
1.42 + parameter_name, parameter_value = parameter
1.43 + container = self.ownerDocument.createElementNS(*parameter_name)
1.44 value.appendChild(container)
1.45 - if isinstance(parameter, (list, dict)):
1.46 - if isinstance(parameter, dict):
1.47 - items = parameter.items()
1.48 + if isinstance(parameter_value, (list, dict)):
1.49 + if isinstance(parameter_value, dict):
1.50 + items = parameter_value.items()
1.51 else:
1.52 - items = parameter
1.53 + items = parameter_value
1.54 for item in items:
1.55 self._add_value(container, item)
1.56 else:
1.57 - text = self.ownerDocument.createTextNode(unicode(parameter))
1.58 + text = self.ownerDocument.createTextNode(unicode(parameter_value))
1.59 container.appendChild(text)
1.60
1.61 def _get_value(self, parameter):
1.62 +
1.63 + "Return the parameter name and value from within the given 'parameter'."
1.64 +
1.65 elements = parameter.xpath("*")
1.66 if elements:
1.67 items = []
1.68 for element in elements:
1.69 items.append(self._get_value(element))
1.70 - return (parameter.namespaceURI, parameter.name), items
1.71 + return ParameterName(parameter.namespaceURI, parameter.name), items
1.72 else:
1.73 - return (parameter.namespaceURI, parameter.name), parameter.textContent.strip()
1.74 + return ParameterName(parameter.namespaceURI, parameter.name), parameter.textContent.strip()
1.75
1.76 methodName = property(_methodName)
1.77 resultParameter = property(_resultParameter)
1.78 resultParameterValue = property(_resultParameterValue)
1.79 parameters = property(_parameters)
1.80 - parameterValues = property(_parameterValues, _setParameterValues)
1.81 + rawParameterValues = property(_rawParameterValues, _setRawParameterValues)
1.82 + parameterValues = property(_parameterValues)
1.83
1.84 class SOAPFaultElement(SOAPNode):
1.85