diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2014-11-27 20:13:16 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2014-11-27 20:13:16 (GMT) |
commit | fc8e9b0e726c14d10cf33864710364b3cb4ae368 (patch) | |
tree | 0bfb71556470c4bdbbc4e40b8b1555c189ab6727 | |
parent | 7a6915e17d1ea9d740c23772160c18fdd5a5395f (diff) | |
download | cpython-fc8e9b0e726c14d10cf33864710364b3cb4ae368.zip cpython-fc8e9b0e726c14d10cf33864710364b3cb4ae368.tar.gz cpython-fc8e9b0e726c14d10cf33864710364b3cb4ae368.tar.bz2 |
Issue #22915: SAX parser now supports files opened with file descriptor or
bytes path.
-rw-r--r-- | Lib/test/test_sax.py | 24 | ||||
-rw-r--r-- | Lib/xml/sax/saxutils.py | 2 | ||||
-rw-r--r-- | Misc/NEWS | 3 |
3 files changed, 28 insertions, 1 deletions
diff --git a/Lib/test/test_sax.py b/Lib/test/test_sax.py index cfa18f7..a6238b2 100644 --- a/Lib/test/test_sax.py +++ b/Lib/test/test_sax.py @@ -648,6 +648,30 @@ class ExpatReaderTest(XmlTestBase): self.assertEqual(result.getvalue(), xml_test_out) + def test_expat_binary_file_bytes_name(self): + fname = os.fsencode(TEST_XMLFILE) + parser = create_parser() + result = BytesIO() + xmlgen = XMLGenerator(result) + + parser.setContentHandler(xmlgen) + with open(fname, 'rb') as f: + parser.parse(f) + + self.assertEqual(result.getvalue(), xml_test_out) + + def test_expat_binary_file_int_name(self): + parser = create_parser() + result = BytesIO() + xmlgen = XMLGenerator(result) + + parser.setContentHandler(xmlgen) + with open(TEST_XMLFILE, 'rb') as f: + with open(f.fileno(), 'rb', closefd=False) as f2: + parser.parse(f2) + + self.assertEqual(result.getvalue(), xml_test_out) + # ===== DTDHandler support class TestDTDHandler: diff --git a/Lib/xml/sax/saxutils.py b/Lib/xml/sax/saxutils.py index 74de9b0..1d3d0ec 100644 --- a/Lib/xml/sax/saxutils.py +++ b/Lib/xml/sax/saxutils.py @@ -346,7 +346,7 @@ def prepare_input_source(source, base=""): f = source source = xmlreader.InputSource() source.setByteStream(f) - if hasattr(f, "name"): + if hasattr(f, "name") and isinstance(f.name, str): source.setSystemId(f.name) if source.getByteStream() is None: @@ -36,6 +36,9 @@ Core and Builtins Library ------- +- Issue #22915: SAX parser now supports files opened with file descriptor or + bytes path. + - Issue #22609: Constructors and update methods of mapping classes in the collections module now accept the self keyword argument. |