diff options
author | Gordon P. Hemsley <me@gphemsley.org> | 2019-09-10 15:22:01 (GMT) |
---|---|---|
committer | Stefan Behnel <stefan_ml@behnel.de> | 2019-09-10 15:22:01 (GMT) |
commit | 7d952ded6813c896ea3f4234bb8db5247dcb5484 (patch) | |
tree | 15472d3858af207919e4893b1335d99d08974616 | |
parent | a9b6033179b64b985394ad351501089a6a94fc9d (diff) | |
download | cpython-7d952ded6813c896ea3f4234bb8db5247dcb5484.zip cpython-7d952ded6813c896ea3f4234bb8db5247dcb5484.tar.gz cpython-7d952ded6813c896ea3f4234bb8db5247dcb5484.tar.bz2 |
bpo-32424: Deprecate xml.etree.ElementTree.Element.copy() in favor of copy.copy() (GH-12995)
-rw-r--r-- | Lib/test/test_xml_etree.py | 29 | ||||
-rw-r--r-- | Lib/xml/etree/ElementTree.py | 7 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2019-04-28-10-34-19.bpo-32424.eqNPhM.rst | 3 |
3 files changed, 39 insertions, 0 deletions
diff --git a/Lib/test/test_xml_etree.py b/Lib/test/test_xml_etree.py index 87a6fa1..9fbb4ac 100644 --- a/Lib/test/test_xml_etree.py +++ b/Lib/test/test_xml_etree.py @@ -2211,6 +2211,35 @@ 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 e75200a..c8d898f 100644 --- a/Lib/xml/etree/ElementTree.py +++ b/Lib/xml/etree/ElementTree.py @@ -195,6 +195,13 @@ class Element: 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 elem.tail = self.tail diff --git a/Misc/NEWS.d/next/Library/2019-04-28-10-34-19.bpo-32424.eqNPhM.rst b/Misc/NEWS.d/next/Library/2019-04-28-10-34-19.bpo-32424.eqNPhM.rst new file mode 100644 index 0000000..a60d68b --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-04-28-10-34-19.bpo-32424.eqNPhM.rst @@ -0,0 +1,3 @@ +Deprecate xml.etree.ElementTree.Element.copy() in favor of copy.copy(). + +Patch by Gordon P. Hemsley |