Merge pull request #254 from barreverte/develop
tostring.escape : optimization
This commit is contained in:
commit
23750357e2
3 changed files with 10 additions and 30 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -12,3 +12,4 @@ sleekxmpp.egg-info/
|
|||
*~
|
||||
.baboon/
|
||||
.DS_STORE
|
||||
*.iml
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
import sys
|
||||
from xml.etree.ElementTree import _escape_cdata, _escape_attrib
|
||||
|
||||
if sys.version_info < (3, 0):
|
||||
import types
|
||||
|
@ -140,33 +141,12 @@ def tostring(xml=None, xmlns='', stream=None, outbuffer='',
|
|||
|
||||
|
||||
def escape(text, use_cdata=False):
|
||||
"""Convert special characters in XML to escape sequences.
|
||||
encoding = 'utf-8'
|
||||
|
||||
:param string text: The XML text to convert.
|
||||
:rtype: Unicode string
|
||||
"""
|
||||
if sys.version_info < (3, 0):
|
||||
if type(text) != types.UnicodeType:
|
||||
text = unicode(text, 'utf-8', 'ignore')
|
||||
if use_cdata:
|
||||
return _escape_cdata(text, encoding)
|
||||
|
||||
escapes = {'&': '&',
|
||||
'<': '<',
|
||||
'>': '>',
|
||||
"'": ''',
|
||||
'"': '"'}
|
||||
|
||||
if not use_cdata:
|
||||
text = list(text)
|
||||
for i, c in enumerate(text):
|
||||
text[i] = escapes.get(c, c)
|
||||
return ''.join(text)
|
||||
else:
|
||||
escape_needed = False
|
||||
for c in text:
|
||||
if c in escapes:
|
||||
escape_needed = True
|
||||
break
|
||||
if escape_needed:
|
||||
escaped = map(lambda x : "<![CDATA[%s]]>" % x, text.split("]]>"))
|
||||
return "<![CDATA[]]]><![CDATA[]>]]>".join(escaped)
|
||||
return text
|
||||
text = _escape_attrib(text, encoding)
|
||||
if "'" in text:
|
||||
text = text.replace("'", "'")
|
||||
return text
|
||||
|
|
|
@ -34,8 +34,7 @@ class TestToString(SleekTest):
|
|||
desired = """<foo bar="baz">'Hi"""
|
||||
desired += """ & welcome!'</foo>"""
|
||||
|
||||
self.failUnless(escaped == desired,
|
||||
"XML escaping did not work: %s." % escaped)
|
||||
self.assertEqual(escaped, desired)
|
||||
|
||||
def testEmptyElement(self):
|
||||
"""Test converting an empty element to a string."""
|
||||
|
|
Loading…
Reference in a new issue