Commit 0ccf203a authored by Serhiy Storchaka's avatar Serhiy Storchaka

Issue #22915: SAX parser now supports files opened with file descriptor or

bytes path.
parent 70a19f1c
...@@ -648,6 +648,30 @@ class ExpatReaderTest(XmlTestBase): ...@@ -648,6 +648,30 @@ class ExpatReaderTest(XmlTestBase):
self.assertEqual(result.getvalue(), xml_test_out) 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 # ===== DTDHandler support
class TestDTDHandler: class TestDTDHandler:
......
...@@ -346,7 +346,7 @@ def prepare_input_source(source, base=""): ...@@ -346,7 +346,7 @@ def prepare_input_source(source, base=""):
f = source f = source
source = xmlreader.InputSource() source = xmlreader.InputSource()
source.setByteStream(f) source.setByteStream(f)
if hasattr(f, "name"): if hasattr(f, "name") and isinstance(f.name, str):
source.setSystemId(f.name) source.setSystemId(f.name)
if source.getByteStream() is None: if source.getByteStream() is None:
......
...@@ -36,6 +36,9 @@ Core and Builtins ...@@ -36,6 +36,9 @@ Core and Builtins
Library 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 - Issue #22609: Constructors and update methods of mapping classes in the
collections module now accept the self keyword argument. collections module now accept the self keyword argument.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment