Skip to content

Commit cc6d8f8

Browse files
[3.9] bpo-45948: Remove constructor discrepancy in C version of ElementTree.XMLParser (GH-31152) (GH-31299)
Both implementations accept target=None now. (cherry picked from commit 168fd64)
1 parent a7c1cc4 commit cc6d8f8

File tree

4 files changed

+19
-5
lines changed

4 files changed

+19
-5
lines changed

Lib/test/test_xml_etree.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -740,6 +740,15 @@ def end_ns(self, prefix):
740740
('end-ns', ''),
741741
])
742742

743+
def test_initialize_parser_without_target(self):
744+
# Explicit None
745+
parser = ET.XMLParser(target=None)
746+
self.assertIsInstance(parser.target, ET.TreeBuilder)
747+
748+
# Implicit None
749+
parser2 = ET.XMLParser()
750+
self.assertIsInstance(parser2.target, ET.TreeBuilder)
751+
743752
def test_children(self):
744753
# Test Element children iteration
745754

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Fixed a discrepancy in the C implementation of the
2+
:mod:`xml.etree.ElementTree` module. Now, instantiating an
3+
:class:`xml.etree.ElementTree.XMLParser` with a ``target=None``
4+
keyword provides a default :class:`xml.etree.ElementTree.TreeBuilder`
5+
target as the Python implementation does.

Modules/_elementtree.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3636,15 +3636,15 @@ ignore_attribute_error(PyObject *value)
36363636
_elementtree.XMLParser.__init__
36373637
36383638
*
3639-
target: object = NULL
3639+
target: object = None
36403640
encoding: str(accept={str, NoneType}) = None
36413641
36423642
[clinic start generated code]*/
36433643

36443644
static int
36453645
_elementtree_XMLParser___init___impl(XMLParserObject *self, PyObject *target,
36463646
const char *encoding)
3647-
/*[clinic end generated code: output=3ae45ec6cdf344e4 input=53e35a829ae043e8]*/
3647+
/*[clinic end generated code: output=3ae45ec6cdf344e4 input=7e716dd6e4f3e439]*/
36483648
{
36493649
self->entity = PyDict_New();
36503650
if (!self->entity)
@@ -3669,7 +3669,7 @@ _elementtree_XMLParser___init___impl(XMLParserObject *self, PyObject *target,
36693669
(unsigned long)_Py_HashSecret.expat.hashsalt);
36703670
}
36713671

3672-
if (target) {
3672+
if (target != Py_None) {
36733673
Py_INCREF(target);
36743674
} else {
36753675
target = treebuilder_new(&TreeBuilder_Type, NULL, NULL);

Modules/clinic/_elementtree.c.h

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)