summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Doc/whatsnew/3.12.rst6
-rw-r--r--Lib/test/test_xml_etree.py29
-rw-r--r--Lib/xml/etree/ElementTree.py13
-rw-r--r--Misc/NEWS.d/next/Library/2022-06-28-14-41-22.gh-issue-94383.CXnquo.rst5
4 files changed, 11 insertions, 42 deletions
diff --git a/Doc/whatsnew/3.12.rst b/Doc/whatsnew/3.12.rst
index ed21aba..43239a7 100644
--- a/Doc/whatsnew/3.12.rst
+++ b/Doc/whatsnew/3.12.rst
@@ -293,6 +293,12 @@ Removed
a C implementation of :func:`~hashlib.pbkdf2_hmac()` which is faster.
(Contributed by Victor Stinner in :gh:`94199`.)
+* :mod:`xml.etree`: Remove the ``ElementTree.Element.copy()`` method of the
+ pure Python implementation, deprecated in Python 3.10, use the
+ :func:`copy.copy` function instead. The C implementation of :mod:`xml.etree`
+ has no ``copy()`` method, only a ``__copy__()`` method.
+ (Contributed by Victor Stinner in :gh:`94383`.)
+
Porting to Python 3.12
======================
diff --git a/Lib/test/test_xml_etree.py b/Lib/test/test_xml_etree.py
index afa4641..8399556 100644
--- a/Lib/test/test_xml_etree.py
+++ b/Lib/test/test_xml_etree.py
@@ -2333,35 +2333,6 @@ class BasicElementTest(ElementTestCase, unittest.TestCase):
self.assertIsNot(element_foo.attrib, attrib)
self.assertNotEqual(element_foo.attrib, attrib)
- def test_copy(self):
- # Only run this test if Element.copy() is defined.
- if "copy" not in dir(ET.Element):
- raise unittest.SkipTest("Element.copy() not present")
-
- element_foo = ET.Element("foo", { "zix": "wyp" })
- element_foo.append(ET.Element("bar", { "baz": "qix" }))
-
- with self.assertWarns(DeprecationWarning):
- element_foo2 = element_foo.copy()
-
- # elements are not the same
- self.assertIsNot(element_foo2, element_foo)
-
- # string attributes are equal
- self.assertEqual(element_foo2.tag, element_foo.tag)
- self.assertEqual(element_foo2.text, element_foo.text)
- self.assertEqual(element_foo2.tail, element_foo.tail)
-
- # number of children is the same
- self.assertEqual(len(element_foo2), len(element_foo))
-
- # children are the same
- for (child1, child2) in itertools.zip_longest(element_foo, element_foo2):
- self.assertIs(child1, child2)
-
- # attrib is a copy
- self.assertEqual(element_foo2.attrib, element_foo.attrib)
-
def test___copy__(self):
element_foo = ET.Element("foo", { "zix": "wyp" })
element_foo.append(ET.Element("bar", { "baz": "qix" }))
diff --git a/Lib/xml/etree/ElementTree.py b/Lib/xml/etree/ElementTree.py
index 1dc8035..ebbe2b7 100644
--- a/Lib/xml/etree/ElementTree.py
+++ b/Lib/xml/etree/ElementTree.py
@@ -188,19 +188,6 @@ class Element:
"""
return self.__class__(tag, attrib)
- def copy(self):
- """Return copy of current element.
-
- This creates a shallow copy. Subelements will be shared with the
- original tree.
-
- """
- warnings.warn(
- "elem.copy() is deprecated. Use copy.copy(elem) instead.",
- DeprecationWarning
- )
- return self.__copy__()
-
def __copy__(self):
elem = self.makeelement(self.tag, self.attrib)
elem.text = self.text
diff --git a/Misc/NEWS.d/next/Library/2022-06-28-14-41-22.gh-issue-94383.CXnquo.rst b/Misc/NEWS.d/next/Library/2022-06-28-14-41-22.gh-issue-94383.CXnquo.rst
new file mode 100644
index 0000000..9ed476b
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2022-06-28-14-41-22.gh-issue-94383.CXnquo.rst
@@ -0,0 +1,5 @@
+:mod:`xml.etree`: Remove the ``ElementTree.Element.copy()`` method of the
+pure Python implementation, deprecated in Python 3.10, use the
+:func:`copy.copy` function instead. The C implementation of :mod:`xml.etree`
+has no ``copy()`` method, only a ``__copy__()`` method. Patch by Victor
+Stinner.