Update tostring methods.
Will now always show top-level namespace, unless it is the same as the stream's default namespace. Also added the XMPP stream namespace to the namespace map as 'stream'.
This commit is contained in:
@@ -10,7 +10,8 @@ from __future__ import unicode_literals
|
||||
import types
|
||||
|
||||
|
||||
def tostring(xml=None, xmlns='', stanza_ns='', stream=None, outbuffer=''):
|
||||
def tostring(xml=None, xmlns='', stanza_ns='', stream=None,
|
||||
outbuffer='', top_level=False):
|
||||
"""
|
||||
Serialize an XML object to a Unicode string.
|
||||
|
||||
@@ -29,6 +30,8 @@ def tostring(xml=None, xmlns='', stanza_ns='', stream=None, outbuffer=''):
|
||||
stream -- The XML stream that generated the XML object.
|
||||
outbuffer -- Optional buffer for storing serializations during
|
||||
recursive calls.
|
||||
top_level -- Indicates that the element is the outermost
|
||||
element.
|
||||
"""
|
||||
# Add previous results to the start of the output.
|
||||
output = [outbuffer]
|
||||
@@ -42,14 +45,21 @@ def tostring(xml=None, xmlns='', stanza_ns='', stream=None, outbuffer=''):
|
||||
else:
|
||||
tag_xmlns = u''
|
||||
|
||||
default_ns = ''
|
||||
stream_ns = ''
|
||||
if stream:
|
||||
default_ns = stream.default_ns
|
||||
stream_ns = stream.stream_ns
|
||||
|
||||
# Output the tag name and derived namespace of the element.
|
||||
namespace = u''
|
||||
if tag_xmlns not in ['', xmlns, stanza_ns]:
|
||||
if top_level and tag_xmlns not in ['', default_ns, stream_ns] or \
|
||||
tag_xmlns not in ['', xmlns, stanza_ns, stream_ns]:
|
||||
namespace = u' xmlns="%s"' % tag_xmlns
|
||||
if stream and tag_xmlns in stream.namespace_map:
|
||||
mapped_namespace = stream.namespace_map[tag_xmlns]
|
||||
if mapped_namespace:
|
||||
tag_name = u"%s:%s" % (mapped_namespace, tag_name)
|
||||
if stream and tag_xmlns in stream.namespace_map:
|
||||
mapped_namespace = stream.namespace_map[tag_xmlns]
|
||||
if mapped_namespace:
|
||||
tag_name = u"%s:%s" % (mapped_namespace, tag_name)
|
||||
output.append(u"<%s" % tag_name)
|
||||
output.append(namespace)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user