diff options
author | Lance Stout <lancestout@gmail.com> | 2010-08-04 14:41:37 -0400 |
---|---|---|
committer | Lance Stout <lancestout@gmail.com> | 2010-08-04 14:41:37 -0400 |
commit | c54466596f3dcc7a35a41c49fff0d057d4a8ed8f (patch) | |
tree | 4171a261c93b8b4ead35938662cd8907ea5def5d /sleekxmpp/xmlstream/tostring/tostring26.py | |
parent | aa1dbe97e0df2437a63a0b16566b75b8a874f065 (diff) | |
download | slixmpp-c54466596f3dcc7a35a41c49fff0d057d4a8ed8f.tar.gz slixmpp-c54466596f3dcc7a35a41c49fff0d057d4a8ed8f.tar.bz2 slixmpp-c54466596f3dcc7a35a41c49fff0d057d4a8ed8f.tar.xz slixmpp-c54466596f3dcc7a35a41c49fff0d057d4a8ed8f.zip |
Modified sleekxmpp.xmlstream.tostring to import ToString class based on Python version.
The package sleekxmpp.xmlstream.tostring26 remains for now until stanzabase is updated, but is no longer needed.
Diffstat (limited to 'sleekxmpp/xmlstream/tostring/tostring26.py')
-rw-r--r-- | sleekxmpp/xmlstream/tostring/tostring26.py | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/sleekxmpp/xmlstream/tostring/tostring26.py b/sleekxmpp/xmlstream/tostring/tostring26.py new file mode 100644 index 00000000..9711c300 --- /dev/null +++ b/sleekxmpp/xmlstream/tostring/tostring26.py @@ -0,0 +1,65 @@ +import types + +class ToString(object): + def __str__(self, xml=None, xmlns='', stringbuffer=''): + if xml is None: + xml = self.xml + newoutput = [stringbuffer] + #TODO respect ET mapped namespaces + itag = xml.tag.split('}', 1)[-1] + if '}' in xml.tag: + ixmlns = xml.tag.split('}', 1)[0][1:] + else: + ixmlns = '' + nsbuffer = '' + if xmlns != ixmlns and ixmlns != u'' and ixmlns != self.namespace: + if self.stream is not None and ixmlns in self.stream.namespace_map: + if self.stream.namespace_map[ixmlns] != u'': + itag = "%s:%s" % (self.stream.namespace_map[ixmlns], itag) + else: + nsbuffer = """ xmlns="%s\"""" % ixmlns + if ixmlns not in ('', xmlns, self.namespace): + nsbuffer = """ xmlns="%s\"""" % ixmlns + newoutput.append("<%s" % itag) + newoutput.append(nsbuffer) + for attrib in xml.attrib: + if '{' not in attrib: + newoutput.append(""" %s="%s\"""" % (attrib, self.xmlesc(xml.attrib[attrib]))) + if len(xml) or xml.text or xml.tail: + newoutput.append(u">") + if xml.text: + newoutput.append(self.xmlesc(xml.text)) + if len(xml): + for child in xml.getchildren(): + newoutput.append(self.__str__(child, ixmlns)) + newoutput.append(u"</%s>" % (itag, )) + if xml.tail: + newoutput.append(self.xmlesc(xml.tail)) + elif xml.text: + newoutput.append(">%s</%s>" % (self.xmlesc(xml.text), itag)) + else: + newoutput.append(" />") + return u''.join(newoutput) + + def xmlesc(self, text): + if type(text) != types.UnicodeType: + text = list(unicode(text, 'utf-8', 'ignore')) + else: + text = list(text) + + cc = 0 + matches = (u'&', u'<', u'"', u'>', u"'") + for c in text: + if c in matches: + if c == u'&': + text[cc] = u'&' + elif c == u'<': + text[cc] = u'<' + elif c == u'>': + text[cc] = u'>' + elif c == u"'": + text[cc] = u''' + else: + text[cc] = u'"' + cc += 1 + return ''.join(text) |