mirror of
https://github.com/python/cpython.git
synced 2025-08-03 00:23:06 +00:00
[3.13] gh-135640: Adds more type checking to ElementTree (GH-135643) (GH-136226)
Some checks are pending
Tests / (push) Blocked by required conditions
Tests / Windows MSI (push) Blocked by required conditions
Tests / Change detection (push) Waiting to run
Tests / Docs (push) Blocked by required conditions
Tests / Check if the ABI has changed (push) Blocked by required conditions
Tests / Check if Autoconf files are up to date (push) Blocked by required conditions
Tests / Check if generated files are up to date (push) Blocked by required conditions
Tests / Ubuntu SSL tests with OpenSSL (push) Blocked by required conditions
Tests / WASI (push) Blocked by required conditions
Tests / Hypothesis tests on Ubuntu (push) Blocked by required conditions
Tests / Address sanitizer (push) Blocked by required conditions
Tests / CIFuzz (push) Blocked by required conditions
Tests / All required checks pass (push) Blocked by required conditions
Lint / lint (push) Waiting to run
Some checks are pending
Tests / (push) Blocked by required conditions
Tests / Windows MSI (push) Blocked by required conditions
Tests / Change detection (push) Waiting to run
Tests / Docs (push) Blocked by required conditions
Tests / Check if the ABI has changed (push) Blocked by required conditions
Tests / Check if Autoconf files are up to date (push) Blocked by required conditions
Tests / Check if generated files are up to date (push) Blocked by required conditions
Tests / Ubuntu SSL tests with OpenSSL (push) Blocked by required conditions
Tests / WASI (push) Blocked by required conditions
Tests / Hypothesis tests on Ubuntu (push) Blocked by required conditions
Tests / Address sanitizer (push) Blocked by required conditions
Tests / CIFuzz (push) Blocked by required conditions
Tests / All required checks pass (push) Blocked by required conditions
Lint / lint (push) Waiting to run
(cherry picked from commit e0245c789f
)
Co-authored-by: Kira <kirawhoprograms@fastmail.com>
This commit is contained in:
parent
d80df8c1a5
commit
1de8fc3e4b
3 changed files with 39 additions and 2 deletions
|
@ -218,6 +218,33 @@ class ElementTreeTest(unittest.TestCase):
|
||||||
def serialize_check(self, elem, expected):
|
def serialize_check(self, elem, expected):
|
||||||
self.assertEqual(serialize(elem), expected)
|
self.assertEqual(serialize(elem), expected)
|
||||||
|
|
||||||
|
def test_constructor(self):
|
||||||
|
# Test constructor behavior.
|
||||||
|
|
||||||
|
with self.assertRaises(TypeError):
|
||||||
|
tree = ET.ElementTree("")
|
||||||
|
with self.assertRaises(TypeError):
|
||||||
|
tree = ET.ElementTree(ET.ElementTree())
|
||||||
|
|
||||||
|
def test_setroot(self):
|
||||||
|
# Test _setroot behavior.
|
||||||
|
|
||||||
|
tree = ET.ElementTree()
|
||||||
|
element = ET.Element("tag")
|
||||||
|
tree._setroot(element)
|
||||||
|
self.assertEqual(tree.getroot().tag, "tag")
|
||||||
|
self.assertEqual(tree.getroot(), element)
|
||||||
|
|
||||||
|
# Test behavior with an invalid root element
|
||||||
|
|
||||||
|
tree = ET.ElementTree()
|
||||||
|
with self.assertRaises(TypeError):
|
||||||
|
tree._setroot("")
|
||||||
|
with self.assertRaises(TypeError):
|
||||||
|
tree._setroot(ET.ElementTree())
|
||||||
|
with self.assertRaises(TypeError):
|
||||||
|
tree._setroot(None)
|
||||||
|
|
||||||
def test_interface(self):
|
def test_interface(self):
|
||||||
# Test element tree interface.
|
# Test element tree interface.
|
||||||
|
|
||||||
|
|
|
@ -523,7 +523,9 @@ class ElementTree:
|
||||||
|
|
||||||
"""
|
"""
|
||||||
def __init__(self, element=None, file=None):
|
def __init__(self, element=None, file=None):
|
||||||
# assert element is None or iselement(element)
|
if element is not None and not iselement(element):
|
||||||
|
raise TypeError('expected an Element, not %s' %
|
||||||
|
type(element).__name__)
|
||||||
self._root = element # first node
|
self._root = element # first node
|
||||||
if file:
|
if file:
|
||||||
self.parse(file)
|
self.parse(file)
|
||||||
|
@ -539,7 +541,9 @@ class ElementTree:
|
||||||
with the given element. Use with care!
|
with the given element. Use with care!
|
||||||
|
|
||||||
"""
|
"""
|
||||||
# assert iselement(element)
|
if not iselement(element):
|
||||||
|
raise TypeError('expected an Element, not %s'
|
||||||
|
% type(element).__name__)
|
||||||
self._root = element
|
self._root = element
|
||||||
|
|
||||||
def parse(self, source, parser=None):
|
def parse(self, source, parser=None):
|
||||||
|
@ -705,6 +709,8 @@ class ElementTree:
|
||||||
of start/end tags
|
of start/end tags
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
if self._root is None:
|
||||||
|
raise TypeError('ElementTree not initialized')
|
||||||
if not method:
|
if not method:
|
||||||
method = "xml"
|
method = "xml"
|
||||||
elif method not in _serialize:
|
elif method not in _serialize:
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
Address bug where it was possible to call
|
||||||
|
:func:`xml.etree.ElementTree.ElementTree.write` on an ElementTree object with
|
||||||
|
an invalid root element. This behavior blanked the file passed to ``write``
|
||||||
|
if it already existed.
|
Loading…
Add table
Add a link
Reference in a new issue