]> granicus.if.org Git - python/commitdiff
Issue #10590: xml.sax.parseString() now supports string argument.
authorSerhiy Storchaka <storchaka@gmail.com>
Sat, 4 Apr 2015 07:12:26 +0000 (10:12 +0300)
committerSerhiy Storchaka <storchaka@gmail.com>
Sat, 4 Apr 2015 07:12:26 +0000 (10:12 +0300)
Doc/library/xml.sax.rst
Lib/test/test_sax.py
Lib/xml/sax/__init__.py
Misc/NEWS

index e95d6b0f853ac9a708adcd8058aec7cd66fba97e..55f97999defe165046ffc4c98ec75329cf8ff6d8 100644 (file)
@@ -47,7 +47,11 @@ The convenience functions are:
 .. function:: parseString(string, handler, error_handler=handler.ErrorHandler())
 
    Similar to :func:`parse`, but parses from a buffer *string* received as a
-   parameter.
+   parameter.  *string* must be a :class:`str` instance or a
+   :term:`bytes-like object`.
+
+   .. versionchanged:: 3.5
+      Added support of :class:`str` instances.
 
 A typical SAX application uses three kinds of objects: readers, handlers and
 input sources.  "Reader" in this context is another term for parser, i.e. some
index ecfb3913bcccd16f484b549427b32bb4b4a4421e..85c1cfef00d86e86be295024b00d8b1edf490e11 100644 (file)
@@ -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
index b161b1f07a97cb119fe41c203c9b745d5171e47b..ef67ae67a6bdd3167d8cf6de2664132122bffad9 100644 (file)
@@ -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
index a15600b92de6311bfd4c7a0e6daece323cf21d28..2d07fd122ff86215c3949587f8bdf7988aa16349 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -19,6 +19,8 @@ Core and Builtins
 Library
 -------
 
+- Issue #10590: xml.sax.parseString() now supports string argument.
+
 - Issue #23338: Fixed formatting ctypes error messages on Cygwin.
   Patch by Makoto Kato.