summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2015-04-04 07:12:26 (GMT)
committerSerhiy Storchaka <storchaka@gmail.com>2015-04-04 07:12:26 (GMT)
commit778db289b5a1968c67db195572f2384489cca20c (patch)
treebfff3b855d5beeda067bfe7e19d499158c4593d2 /Lib
parentf8aa133cce70472ec7baa21c8b073891101dce15 (diff)
downloadcpython-778db289b5a1968c67db195572f2384489cca20c.zip
cpython-778db289b5a1968c67db195572f2384489cca20c.tar.gz
cpython-778db289b5a1968c67db195572f2384489cca20c.tar.bz2
Issue #10590: xml.sax.parseString() now supports string argument.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_sax.py7
-rw-r--r--Lib/xml/sax/__init__.py8
2 files changed, 12 insertions, 3 deletions
diff --git a/Lib/test/test_sax.py b/Lib/test/test_sax.py
index ecfb391..85c1cfe 100644
--- a/Lib/test/test_sax.py
+++ b/Lib/test/test_sax.py
@@ -200,6 +200,13 @@ class ParseTest(unittest.TestCase):
parseString(s, XMLGenerator(result, 'utf-8'))
self.assertEqual(result.getvalue(), xml_str(self.data, 'utf-8'))
+ def test_parseString_text(self):
+ encodings = ('us-ascii', 'iso-8859-1', 'utf-8',
+ 'utf-16', 'utf-16le', 'utf-16be')
+ for encoding in encodings:
+ self.check_parseString(xml_str(self.data, encoding))
+ self.check_parseString(self.data)
+
def test_parseString_bytes(self):
# UTF-8 is default encoding, US-ASCII is compatible with UTF-8,
# UTF-16 is autodetected
diff --git a/Lib/xml/sax/__init__.py b/Lib/xml/sax/__init__.py
index b161b1f..ef67ae6 100644
--- a/Lib/xml/sax/__init__.py
+++ b/Lib/xml/sax/__init__.py
@@ -33,8 +33,7 @@ def parse(source, handler, errorHandler=ErrorHandler()):
parser.parse(source)
def parseString(string, handler, errorHandler=ErrorHandler()):
- from io import BytesIO
-
+ import io
if errorHandler is None:
errorHandler = ErrorHandler()
parser = make_parser()
@@ -42,7 +41,10 @@ def parseString(string, handler, errorHandler=ErrorHandler()):
parser.setErrorHandler(errorHandler)
inpsrc = InputSource()
- inpsrc.setByteStream(BytesIO(string))
+ if isinstance(string, str):
+ inpsrc.setCharacterStream(io.StringIO(string))
+ else:
+ inpsrc.setByteStream(io.BytesIO(string))
parser.parse(inpsrc)
# this is the parser list used by the make_parser function if no