Skip to content

Commit 168fd64

Browse files
bpo-45948: Remove constructor discrepancy in C version of ElementTree.XMLParser (pythonGH-31152)
Both implementations accept target=None now.
1 parent 9d9cfd6 commit 168fd64

File tree

4 files changed

+19
-5
lines changed

4 files changed

+19
-5
lines changed

Lib/test/test_xml_etree.py

+9
Original file line numberDiff line numberDiff line change
@@ -758,6 +758,15 @@ def end_ns(self, prefix):
758758
('end-ns', ''),
759759
])
760760

761+
def test_initialize_parser_without_target(self):
762+
# Explicit None
763+
parser = ET.XMLParser(target=None)
764+
self.assertIsInstance(parser.target, ET.TreeBuilder)
765+
766+
# Implicit None
767+
parser2 = ET.XMLParser()
768+
self.assertIsInstance(parser2.target, ET.TreeBuilder)
769+
761770
def test_children(self):
762771
# Test Element children iteration
763772

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -3637,15 +3637,15 @@ ignore_attribute_error(PyObject *value)
36373637
_elementtree.XMLParser.__init__
36383638
36393639
*
3640-
target: object = NULL
3640+
target: object = None
36413641
encoding: str(accept={str, NoneType}) = None
36423642
36433643
[clinic start generated code]*/
36443644

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

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

Modules/clinic/_elementtree.c.h

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)