Both implementations accept target=None now.
('end-ns', ''),
])
+ def test_initialize_parser_without_target(self):
+ # Explicit None
+ parser = ET.XMLParser(target=None)
+ self.assertIsInstance(parser.target, ET.TreeBuilder)
+
+ # Implicit None
+ parser2 = ET.XMLParser()
+ self.assertIsInstance(parser2.target, ET.TreeBuilder)
+
def test_children(self):
# Test Element children iteration
--- /dev/null
+Fixed a discrepancy in the C implementation of the
+:mod:`xml.etree.ElementTree` module. Now, instantiating an
+:class:`xml.etree.ElementTree.XMLParser` with a ``target=None``
+keyword provides a default :class:`xml.etree.ElementTree.TreeBuilder`
+target as the Python implementation does.
_elementtree.XMLParser.__init__
*
- target: object = NULL
+ target: object = None
encoding: str(accept={str, NoneType}) = None
[clinic start generated code]*/
static int
_elementtree_XMLParser___init___impl(XMLParserObject *self, PyObject *target,
const char *encoding)
-/*[clinic end generated code: output=3ae45ec6cdf344e4 input=53e35a829ae043e8]*/
+/*[clinic end generated code: output=3ae45ec6cdf344e4 input=7e716dd6e4f3e439]*/
{
self->entity = PyDict_New();
if (!self->entity)
(unsigned long)_Py_HashSecret.expat.hashsalt);
}
- if (target) {
+ if (target != Py_None) {
Py_INCREF(target);
} else {
target = treebuilder_new(&TreeBuilder_Type, NULL, NULL);
PyObject * const *fastargs;
Py_ssize_t nargs = PyTuple_GET_SIZE(args);
Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 0;
- PyObject *target = NULL;
+ PyObject *target = Py_None;
const char *encoding = NULL;
fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser, 0, 0, 0, argsbuf);
exit:
return return_value;
}
-/*[clinic end generated code: output=1385b5e5688f3614 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=992733cfc7390590 input=a9049054013a1b77]*/