From 395618d3d37c5c4092466f4c5ea6919925fda681 Mon Sep 17 00:00:00 2001 From: Nathan Fritz Date: Fri, 29 Jan 2010 02:04:15 -0800 Subject: [PATCH] fixed unicode problems in 2.6 --- LICENSE | 0 sleekxmpp/xmlstream/stanzabase.py | 68 ++++--------------------------- testall.py | 5 ++- 3 files changed, 12 insertions(+), 61 deletions(-) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..e69de29b diff --git a/sleekxmpp/xmlstream/stanzabase.py b/sleekxmpp/xmlstream/stanzabase.py index feb9b268..480e9602 100644 --- a/sleekxmpp/xmlstream/stanzabase.py +++ b/sleekxmpp/xmlstream/stanzabase.py @@ -1,6 +1,12 @@ from xml.etree import cElementTree as ET import logging import traceback +import sys + +if sys.version_info < (3,0): + from . import tostring26 as tostring +else: + from . import tostring xmltester = type(ET.Element('xml')) @@ -23,7 +29,7 @@ class JID(object): def __str__(self): return self.jid -class ElementBase(object): +class ElementBase(tostring.ToString): name = 'stanza' plugin_attrib = 'plugin' namespace = 'jabber:client' @@ -333,63 +339,5 @@ class StanzaBase(ElementBase): logging.error(traceback.format_tb(e)) def send(self): - self.stream.sendRaw(str(self)) + self.stream.sendRaw(self.__str__()) - 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 != '' and ixmlns != self.namespace: - if self.stream is not None and ixmlns in self.stream.namespace_map: - if self.stream.namespace_map[ixmlns] != '': - 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(">") - 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("" % (itag, )) - if xml.tail: - newoutput.append(self.xmlesc(xml.tail)) - elif xml.text: - newoutput.append(">%s" % (self.xmlesc(xml.text), itag)) - else: - newoutput.append(" />") - return ''.join(newoutput) - - def xmlesc(self, text): - text = list(text) - cc = 0 - matches = ('&', '<', '"', '>', "'") - for c in text: - if c in matches: - if c == '&': - text[cc] = '&' - elif c == '<': - text[cc] = '<' - elif c == '>': - text[cc] = '>' - elif c == "'": - text[cc] = ''' - else: - text[cc] = '"' - cc += 1 - return ''.join(text) diff --git a/testall.py b/testall.py index 00c463b9..bf5e1a99 100644 --- a/testall.py +++ b/testall.py @@ -10,7 +10,10 @@ class testoverall(unittest.TestCase): """Testing all modules by compiling them""" import compileall import re - self.failUnless(compileall.compile_dir('.' + os.sep + 'sleekxmpp', rx=re.compile('/[.]svn'), quiet=True)) + if sys.version_info < (3,0): + self.failUnless(compileall.compile_dir('.' + os.sep + 'sleekxmpp', rx=re.compile('/[.]svn'), quiet=True)) + else: + self.failUnless(compileall.compile_dir('.' + os.sep + 'sleekxmpp', rx=re.compile('/[.]svn|26.py'), quiet=True)) def testTabNanny(self): """Invoking the tabnanny"""