# HG changeset patch # User Paul Boddie # Date 1222546192 -7200 # Node ID d97468458c6366a82f745e493225173093c022c2 # Parent bfaa2fd6c1c650fd29509c80a0804dec72345425 Changed the XML-RPC and SOAP node creation methods back to their pure form, introducing "make" methods for combined node creation and insertion, as seen in the XMPP module. Updated the release notes. diff -r bfaa2fd6c1c6 -r d97468458c63 README.txt --- a/README.txt Fri Sep 26 23:09:12 2008 +0200 +++ b/README.txt Sat Sep 27 22:09:52 2008 +0200 @@ -74,9 +74,10 @@ nodes in its own functions. * Changed some XML-RPC node properties in order to retain underlying DOM properties such as data. - * Added convenience methods to the XML-RPC implementation, with combined - node creation and insertion if requested. Introduced similar conveniences - into the SOAP implementation. + * Added convenience methods to the XML-RPC implementation providing combined + node creation and insertion. Introduced similar conveniences into the SOAP + implementation. These methods are similar to those found in the XMPP + implementation. * Enabled prettyprinting support, finally. New in libxml2dom 0.4.7 (Changes since libxml2dom 0.4.6) diff -r bfaa2fd6c1c6 -r d97468458c63 libxml2dom/soap.py --- a/libxml2dom/soap.py Fri Sep 26 23:09:12 2008 +0200 +++ b/libxml2dom/soap.py Sat Sep 27 22:09:52 2008 +0200 @@ -135,7 +135,7 @@ # Node construction methods. - def createSOAPElement(self, localName, insert=0): + def createSOAPElement(self, localName): "Create an element with the appropriate namespace and prefix." @@ -145,9 +145,16 @@ name = prefix + ":" + localName else: name = localName - element = self.createElementNS(ref_element.namespaceURI, name) - if insert: - self.appendChild(element) + return self.createElementNS(ref_element.namespaceURI, name) + + def makeSOAPElement(self, localName): + + """ + Create and insert an element with the appropriate namespace and prefix. + """ + + element = self.createSOAPElement(localName) + self.appendChild(element) return element contents = property(_contents) @@ -210,10 +217,12 @@ # Node construction methods. - def createBody(self, insert=0): - element = self.createSOAPElement("Body") - if insert: - self.add_or_replace_element(element) + def createBody(self): + return self.createSOAPElement("Body") + + def makeBody(self): + element = self.createBody() + self.add_or_replace_element(element) return element body = property(_body, _setBody, _delBody) @@ -239,18 +248,24 @@ # Node construction methods. - def createMethod(self, namespaceURI, name, insert=0): + def createMethod(self, namespaceURI, name): if self.method is not None: self.removeChild(self.method) element = self.createElementNS(namespaceURI, name) element.setAttributeNS(SOAP_ENVELOPE_NAMESPACE, "env:encodingStyle", SOAP_ENCODING_NAMESPACE) + return element + + def makeMethod(self, namespaceURI, name): + element = self.createMethod(namespaceURI, name) self.appendChild(element) return element - def createFault(self, insert=0): - element = self.createSOAPElement("Fault") - if insert: - self.add_or_replace_element(element) + def createFault(self): + return self.createSOAPElement("Fault") + + def makeFault(self): + element = self.createFault() + self.add_or_replace_element(element) return element fault = property(_fault) @@ -318,10 +333,12 @@ # Node construction methods. - def createCode(self, insert=0): - element = self.createSOAPElement("Code") - if insert: - self.add_or_replace_element(element) + def createCode(self): + return self.createSOAPElement("Code") + + def makeCode(self): + element = self.createCode() + self.add_or_replace_element(element) return element code = property(_code) @@ -351,12 +368,15 @@ # Node construction methods. - def createValue(self, value=None, insert=0): + def createValue(self, value=None): code_value = self.createSOAPElement("Value") if value is not None: code_value.value = code - if insert: - self.add_or_replace_element(code_value) + return code_value + + def makeValue(self, value=None): + code_value = self.createValue(value) + self.add_or_replace_element(code_value) return code_value value = property(_value, _setValue) @@ -370,10 +390,12 @@ # Node construction methods. - def createSubcode(self, insert=0): - element = self.createSOAPElement("Subcode") - if insert: - self.add_or_replace_element(element) + def createSubcode(self): + return self.createSOAPElement("Subcode") + + def makeSubcode(self): + element = self.createSubcode() + self.add_or_replace_element(element) return element subcode = property(_subcode) diff -r bfaa2fd6c1c6 -r d97468458c63 libxml2dom/xmlrpc.py --- a/libxml2dom/xmlrpc.py Fri Sep 26 23:09:12 2008 +0200 +++ b/libxml2dom/xmlrpc.py Sat Sep 27 22:09:52 2008 +0200 @@ -66,23 +66,23 @@ "Serialise, under the 'parent', the given 'value' object." if isinstance(value, (str, int, float, bool)): - valueElement = parent.createValue(typenames[value.__class__.__name__], 1) + valueElement = parent.makeValue(typenames[value.__class__.__name__]) valueElement.container.value = str(value) elif isinstance(value, datetime.datetime): - valueElement = parent.createValue("dateTime.iso8601", 1) + valueElement = parent.makeValue("dateTime.iso8601") valueElement.container.value = value.strftime("%Y%m%dT%H:%M:%S") elif isinstance(value, (tuple, list)): - array = parent.createValue("array", 1).container - dataElement = array.createData(1) + array = parent.makeValue("array").container + dataElement = array.makeData() for v in value: self.serialise_value(dataElement, v) elif isinstance(value, dict): - struct = parent.createValue("struct", 1).container + struct = parent.makeValue("struct").container for k, v in value.items(): - member = struct.createMember(1) + member = struct.makeMember() member.memberName = str(k) self.serialise_value(member, v) @@ -113,16 +113,20 @@ # Node construction methods. - def createMethodCall(self, insert=0): - e = self.ownerDocument.createElement("methodCall") - if insert: - self.add_or_replace_element(e) + def createMethodCall(self): + return self.ownerDocument.createElement("methodCall") + + def makeMethodCall(self): + e = self.createMethodCall() + self.add_or_replace_element(e) return e - def createMethodResponse(self, insert=0): - e = self.ownerDocument.createElement("methodResponse") - if insert: - self.add_or_replace_element(e) + def createMethodResponse(self): + return self.ownerDocument.createElement("methodResponse") + + def makeMethodResponse(self): + e = self.createMethodResponse() + self.add_or_replace_element(e) return e class XMLRPCMethodElement(XMLRPCNode): @@ -158,9 +162,9 @@ return None def _setParameterValues(self, values): - params = self.createParameters(1) + params = self.makeParameters() for value in values: - param = params.createParameter(1) + param = params.makeParameter() self.serialise_value(param, value) def _parameters(self): @@ -171,22 +175,28 @@ # Node construction methods. - def createMethodName(self, insert=0): - e = self.ownerDocument.createElement("methodName") - if insert: - self.add_or_replace_element(e) + def createMethodName(self): + return self.ownerDocument.createElement("methodName") + + def makeMethodName(self): + e = self.createMethodName() + self.add_or_replace_element(e) return e - def createParameters(self, insert=0): - e = self.ownerDocument.createElement("params") - if insert: - self.add_or_replace_element(e) + def createParameters(self): + return self.ownerDocument.createElement("params") + + def makeParameters(self): + e = self.createParameters() + self.add_or_replace_element(e) return e - def createFault(self, insert=0): - e = self.ownerDocument.createElement("fault") - if insert: - self.add_or_replace_element(e) + def createFault(self): + return self.ownerDocument.createElement("fault") + + def makeFault(self): + e = self.createFault() + self.add_or_replace_element(e) return e fault = property(_fault) @@ -214,7 +224,7 @@ # Sequence emulation. def append(self, value): - param = self.createParameter(1) + param = self.makeParameter() self.serialise_value(param, value) def values(self): @@ -225,10 +235,12 @@ # Node construction methods. - def createParameter(self, insert=0): - e = self.ownerDocument.createElement("param") - if insert: - self.appendChild(e) + def createParameter(self): + return self.ownerDocument.createElement("param") + + def makeParameter(self): + e = self.createParameter() + self.appendChild(e) return e parameters = property(_parameters) @@ -262,7 +274,7 @@ def append(self, value): if self.valueElement is None: - self.createValue("array", 1) + self.makeValue("array") self.contents.append(value) def values(self): @@ -279,13 +291,16 @@ # Node construction methods. - def createValue(self, typename=None, insert=0): + def createValue(self, typename=None): value = self.ownerDocument.createElement("value") if typename is not None: contents = self.ownerDocument.createElement(typename) value.appendChild(contents) - if insert: - self.add_or_replace_element(value) + return value + + def makeValue(self, typename=None): + value = self.createValue(typename) + self.add_or_replace_element(value) return value valueElement = property(_valueElement) @@ -310,7 +325,7 @@ def append(self, value): if self.dataElement is None: - self.createData(1) + self.makeData() self.serialise_value(self.dataElement, value) def values(self): @@ -321,10 +336,12 @@ # Node construction methods. - def createData(self, insert=0): - e = self.ownerDocument.createElement("data") - if insert: - self.add_or_replace_element(e) + def createData(self): + return self.ownerDocument.createElement("data") + + def makeData(self): + e = self.createData() + self.add_or_replace_element(e) return e dataElement = property(_dataElement) @@ -355,7 +372,7 @@ def append(self, item): name, value = item - member = self.createMember(1) + member = self.makeMember() member.memberName = name self.serialise_value(member, value) @@ -375,10 +392,12 @@ # Node construction methods. - def createMember(self, insert=0): - e = self.ownerDocument.createElement("member") - if insert: - self.appendChild(e) + def createMember(self): + return self.ownerDocument.createElement("member") + + def makeMember(self): + e = self.createMember() + self.appendChild(e) return e members = property(_members) @@ -406,13 +425,16 @@ # Node construction methods. - def createValue(self, typename=None, insert=0): + def createValue(self, typename=None): value = self.ownerDocument.createElement("value") if typename is not None: contents = self.ownerDocument.createElement(typename) value.appendChild(contents) - if insert: - self.appendChild(value) + return value + + def makeValue(self, typename=None): + value = self.createValue(typename) + self.appendChild(value) return value contents = property(_contents) @@ -470,19 +492,24 @@ # Node construction methods. - def createName(self, insert=0): - e = self.ownerDocument.createElement("name") - if insert: - self.add_or_replace_element(e) + def createName(self): + return self.ownerDocument.createElement("name") + + def makeName(self): + e = self.createName() + self.add_or_replace_element(e) return e - def createValue(self, typename=None, insert=0): + def createValue(self, typename=None): value = self.ownerDocument.createElement("value") if typename is not None: contents = self.ownerDocument.createElement(typename) value.appendChild(contents) - if insert: - self.add_or_replace_element(value) + return value + + def makeValue(self, typename=None): + value = self.createValue(typename) + self.add_or_replace_element(value) return value nameElement = property(_nameElement) @@ -535,13 +562,13 @@ if self.container is self: return XMLRPCStringElement._value(self) else: - return None + return self.container.value def _setValue(self, value): if self.container is self: - return XMLRPCStringElement._setValue(self, value) + XMLRPCStringElement._setValue(self, value) else: - raise xml.dom.DOMException(xml.dom.NOT_SUPPORTED_ERR) + self.container.value = value def _contents(self): if self.container is self: diff -r bfaa2fd6c1c6 -r d97468458c63 packages/debian-etch/python-libxml2dom/debian/changelog --- a/packages/debian-etch/python-libxml2dom/debian/changelog Fri Sep 26 23:09:12 2008 +0200 +++ b/packages/debian-etch/python-libxml2dom/debian/changelog Sat Sep 27 22:09:52 2008 +0200 @@ -4,10 +4,11 @@ tendency to merge text nodes in its own functions. * Changed some XML-RPC node properties in order to retain underlying DOM properties such as data. - * Added convenience methods to the XML-RPC implementation, - with combined node creation and insertion if requested. + * Added convenience methods to the XML-RPC implementation + providing combined node creation and insertion. Introduced similar conveniences into the SOAP - implementation. + implementation. These methods are similar to those found + in the XMPP implementation. * Enabled prettyprinting support, finally. -- Paul Boddie Wed, 10 Sep 2008 00:31:55 +0200 diff -r bfaa2fd6c1c6 -r d97468458c63 packages/debian-sarge/python2.3-libxml2dom/debian/changelog --- a/packages/debian-sarge/python2.3-libxml2dom/debian/changelog Fri Sep 26 23:09:12 2008 +0200 +++ b/packages/debian-sarge/python2.3-libxml2dom/debian/changelog Sat Sep 27 22:09:52 2008 +0200 @@ -4,10 +4,11 @@ tendency to merge text nodes in its own functions. * Changed some XML-RPC node properties in order to retain underlying DOM properties such as data. - * Added convenience methods to the XML-RPC implementation, - with combined node creation and insertion if requested. + * Added convenience methods to the XML-RPC implementation + providing combined node creation and insertion. Introduced similar conveniences into the SOAP - implementation. + implementation. These methods are similar to those found + in the XMPP implementation. * Enabled prettyprinting support, finally. -- Paul Boddie Wed, 10 Sep 2008 00:32:39 +0200 diff -r bfaa2fd6c1c6 -r d97468458c63 packages/ubuntu-feisty/python-libxml2dom/debian/changelog --- a/packages/ubuntu-feisty/python-libxml2dom/debian/changelog Fri Sep 26 23:09:12 2008 +0200 +++ b/packages/ubuntu-feisty/python-libxml2dom/debian/changelog Sat Sep 27 22:09:52 2008 +0200 @@ -4,10 +4,11 @@ tendency to merge text nodes in its own functions. * Changed some XML-RPC node properties in order to retain underlying DOM properties such as data. - * Added convenience methods to the XML-RPC implementation, - with combined node creation and insertion if requested. + * Added convenience methods to the XML-RPC implementation + providing combined node creation and insertion. Introduced similar conveniences into the SOAP - implementation. + implementation. These methods are similar to those found + in the XMPP implementation. * Enabled prettyprinting support, finally. -- Paul Boddie Wed, 10 Sep 2008 00:33:14 +0200 diff -r bfaa2fd6c1c6 -r d97468458c63 packages/ubuntu-hoary/python2.4-libxml2dom/debian/changelog --- a/packages/ubuntu-hoary/python2.4-libxml2dom/debian/changelog Fri Sep 26 23:09:12 2008 +0200 +++ b/packages/ubuntu-hoary/python2.4-libxml2dom/debian/changelog Sat Sep 27 22:09:52 2008 +0200 @@ -4,10 +4,11 @@ tendency to merge text nodes in its own functions. * Changed some XML-RPC node properties in order to retain underlying DOM properties such as data. - * Added convenience methods to the XML-RPC implementation, - with combined node creation and insertion if requested. + * Added convenience methods to the XML-RPC implementation + providing combined node creation and insertion. Introduced similar conveniences into the SOAP - implementation. + implementation. These methods are similar to those found + in the XMPP implementation. * Enabled prettyprinting support, finally. -- Paul Boddie Wed, 10 Sep 2008 00:32:59 +0200