mirror of
https://github.com/correl/SleekXMPP.git
synced 2024-11-23 19:19:53 +00:00
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:
parent
cd800d636a
commit
bd9bf3f1c7
5 changed files with 43 additions and 15 deletions
|
@ -106,6 +106,7 @@ class BaseXMPP(XMLStream):
|
||||||
|
|
||||||
self.default_ns = default_ns
|
self.default_ns = default_ns
|
||||||
self.stream_ns = 'http://etherx.jabber.org/streams'
|
self.stream_ns = 'http://etherx.jabber.org/streams'
|
||||||
|
self.namespace_map[self.stream_ns] = 'stream'
|
||||||
|
|
||||||
self.boundjid = JID("")
|
self.boundjid = JID("")
|
||||||
|
|
||||||
|
@ -119,6 +120,8 @@ class BaseXMPP(XMLStream):
|
||||||
|
|
||||||
self.sentpresence = False
|
self.sentpresence = False
|
||||||
|
|
||||||
|
self.stanza = sleekxmpp.stanza
|
||||||
|
|
||||||
self.register_handler(
|
self.register_handler(
|
||||||
Callback('IM',
|
Callback('IM',
|
||||||
MatchXPath('{%s}message/{%s}body' % (self.default_ns,
|
MatchXPath('{%s}message/{%s}body' % (self.default_ns,
|
||||||
|
|
|
@ -1007,7 +1007,9 @@ class ElementBase(object):
|
||||||
"""
|
"""
|
||||||
Return a string serialization of the underlying XML object.
|
Return a string serialization of the underlying XML object.
|
||||||
"""
|
"""
|
||||||
return tostring(self.xml, xmlns='', stanza_ns=self.namespace)
|
return tostring(self.xml, xmlns='',
|
||||||
|
stanza_ns=self.namespace,
|
||||||
|
top_level=True)
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
"""
|
"""
|
||||||
|
@ -1217,4 +1219,5 @@ class StanzaBase(ElementBase):
|
||||||
"""Serialize the stanza's XML to a string."""
|
"""Serialize the stanza's XML to a string."""
|
||||||
return tostring(self.xml, xmlns='',
|
return tostring(self.xml, xmlns='',
|
||||||
stanza_ns=self.namespace,
|
stanza_ns=self.namespace,
|
||||||
stream=self.stream)
|
stream=self.stream,
|
||||||
|
top_level = True)
|
||||||
|
|
|
@ -7,7 +7,8 @@
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
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.
|
Serialize an XML object to a Unicode string.
|
||||||
|
|
||||||
|
@ -26,6 +27,8 @@ def tostring(xml=None, xmlns='', stanza_ns='', stream=None, outbuffer=''):
|
||||||
stream -- The XML stream that generated the XML object.
|
stream -- The XML stream that generated the XML object.
|
||||||
outbuffer -- Optional buffer for storing serializations during
|
outbuffer -- Optional buffer for storing serializations during
|
||||||
recursive calls.
|
recursive calls.
|
||||||
|
top_level -- Indicates that the element is the outermost
|
||||||
|
element.
|
||||||
"""
|
"""
|
||||||
# Add previous results to the start of the output.
|
# Add previous results to the start of the output.
|
||||||
output = [outbuffer]
|
output = [outbuffer]
|
||||||
|
@ -39,14 +42,21 @@ def tostring(xml=None, xmlns='', stanza_ns='', stream=None, outbuffer=''):
|
||||||
else:
|
else:
|
||||||
tag_xmlns = ''
|
tag_xmlns = ''
|
||||||
|
|
||||||
|
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.
|
# Output the tag name and derived namespace of the element.
|
||||||
namespace = ''
|
namespace = ''
|
||||||
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 = ' xmlns="%s"' % tag_xmlns
|
namespace = ' xmlns="%s"' % tag_xmlns
|
||||||
if stream and tag_xmlns in stream.namespace_map:
|
if stream and tag_xmlns in stream.namespace_map:
|
||||||
mapped_namespace = stream.namespace_map[tag_xmlns]
|
mapped_namespace = stream.namespace_map[tag_xmlns]
|
||||||
if mapped_namespace:
|
if mapped_namespace:
|
||||||
tag_name = "%s:%s" % (mapped_namespace, tag_name)
|
tag_name = "%s:%s" % (mapped_namespace, tag_name)
|
||||||
output.append("<%s" % tag_name)
|
output.append("<%s" % tag_name)
|
||||||
output.append(namespace)
|
output.append(namespace)
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,8 @@ from __future__ import unicode_literals
|
||||||
import types
|
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.
|
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.
|
stream -- The XML stream that generated the XML object.
|
||||||
outbuffer -- Optional buffer for storing serializations during
|
outbuffer -- Optional buffer for storing serializations during
|
||||||
recursive calls.
|
recursive calls.
|
||||||
|
top_level -- Indicates that the element is the outermost
|
||||||
|
element.
|
||||||
"""
|
"""
|
||||||
# Add previous results to the start of the output.
|
# Add previous results to the start of the output.
|
||||||
output = [outbuffer]
|
output = [outbuffer]
|
||||||
|
@ -42,14 +45,21 @@ def tostring(xml=None, xmlns='', stanza_ns='', stream=None, outbuffer=''):
|
||||||
else:
|
else:
|
||||||
tag_xmlns = u''
|
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.
|
# Output the tag name and derived namespace of the element.
|
||||||
namespace = u''
|
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
|
namespace = u' xmlns="%s"' % tag_xmlns
|
||||||
if stream and tag_xmlns in stream.namespace_map:
|
if stream and tag_xmlns in stream.namespace_map:
|
||||||
mapped_namespace = stream.namespace_map[tag_xmlns]
|
mapped_namespace = stream.namespace_map[tag_xmlns]
|
||||||
if mapped_namespace:
|
if mapped_namespace:
|
||||||
tag_name = u"%s:%s" % (mapped_namespace, tag_name)
|
tag_name = u"%s:%s" % (mapped_namespace, tag_name)
|
||||||
output.append(u"<%s" % tag_name)
|
output.append(u"<%s" % tag_name)
|
||||||
output.append(namespace)
|
output.append(namespace)
|
||||||
|
|
||||||
|
|
|
@ -102,11 +102,13 @@ class TestToString(SleekTest):
|
||||||
"""
|
"""
|
||||||
Test that stanza objects are serialized properly.
|
Test that stanza objects are serialized properly.
|
||||||
"""
|
"""
|
||||||
|
self.stream_start()
|
||||||
|
|
||||||
utf8_message = '\xe0\xb2\xa0_\xe0\xb2\xa0'
|
utf8_message = '\xe0\xb2\xa0_\xe0\xb2\xa0'
|
||||||
if not hasattr(utf8_message, 'decode'):
|
if not hasattr(utf8_message, 'decode'):
|
||||||
# Python 3
|
# Python 3
|
||||||
utf8_message = bytes(utf8_message, encoding='utf-8')
|
utf8_message = bytes(utf8_message, encoding='utf-8')
|
||||||
msg = Message()
|
msg = self.Message()
|
||||||
msg['body'] = utf8_message.decode('utf-8')
|
msg['body'] = utf8_message.decode('utf-8')
|
||||||
expected = '<message><body>\xe0\xb2\xa0_\xe0\xb2\xa0</body></message>'
|
expected = '<message><body>\xe0\xb2\xa0_\xe0\xb2\xa0</body></message>'
|
||||||
result = msg.__str__()
|
result = msg.__str__()
|
||||||
|
|
Loading…
Reference in a new issue