]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-36543: Revert "bpo-36543: Remove the xml.etree.cElementTree module." (GH-20117)
authorSerhiy Storchaka <storchaka@gmail.com>
Wed, 10 Jun 2020 15:39:12 +0000 (18:39 +0300)
committerGitHub <noreply@github.com>
Wed, 10 Jun 2020 15:39:12 +0000 (17:39 +0200)
* Revert "bpo-36543: Remove the xml.etree.cElementTree module. (GH-19108)"

This reverts commit b33e52511a59c6da7132c226b7f7489b092a33eb.

Doc/library/xml.etree.elementtree.rst
Doc/whatsnew/3.9.rst
Lib/test/test_xml_etree_c.py
Lib/xml/etree/cElementTree.py [new file with mode: 0644]
Misc/NEWS.d/next/Library/2020-05-15-21-14-45.bpo-36543.Jt-eSX.rst [new file with mode: 0644]

index 2085a85927e460a786a825da75012f999177cb34..7725e4d158d429e90be266ef91450bec628f2f11 100644 (file)
@@ -15,6 +15,8 @@ for parsing and creating XML data.
 
 .. versionchanged:: 3.3
    This module will use a fast implementation whenever available.
+
+.. deprecated:: 3.3
    The :mod:`xml.etree.cElementTree` module is deprecated.
 
 
index b20cd14565ae12bf60a22598d9eed37009307b46..67a83bc9584578ee47318d612b799908291cb6fe 100644 (file)
@@ -826,11 +826,6 @@ Removed
   module have been removed.  They were deprecated in Python 3.2.
   Use ``iter(x)`` or ``list(x)`` instead of ``x.getchildren()`` and
   ``x.iter()`` or ``list(x.iter())`` instead of ``x.getiterator()``.
-  The ``xml.etree.cElementTree`` module has been removed,
-  use the :mod:`xml.etree.ElementTree` module instead.
-  Since Python 3.3 the ``xml.etree.cElementTree`` module has been deprecated,
-  the ``xml.etree.ElementTree`` module uses a fast implementation whenever
-  available.
   (Contributed by Serhiy Storchaka in :issue:`36543`.)
 
 * The old :mod:`plistlib` API has been removed, it was deprecated since Python
index 7437e13d0611cc69c036fcb207d75ccde1326afd..e26e1714a540bdb6647caaf671d9e63646b83105 100644 (file)
@@ -8,6 +8,9 @@ import unittest
 
 cET = import_fresh_module('xml.etree.ElementTree',
                           fresh=['_elementtree'])
+cET_alias = import_fresh_module('xml.etree.cElementTree',
+                                fresh=['_elementtree', 'xml.etree'],
+                                deprecated=True)
 
 
 @unittest.skipUnless(cET, 'requires _elementtree')
@@ -167,6 +170,14 @@ class MiscTests(unittest.TestCase):
         support.gc_collect()
 
 
+@unittest.skipUnless(cET, 'requires _elementtree')
+class TestAliasWorking(unittest.TestCase):
+    # Test that the cET alias module is alive
+    def test_alias_working(self):
+        e = cET_alias.Element('foo')
+        self.assertEqual(e.tag, 'foo')
+
+
 @unittest.skipUnless(cET, 'requires _elementtree')
 @support.cpython_only
 class TestAcceleratorImported(unittest.TestCase):
@@ -175,6 +186,9 @@ class TestAcceleratorImported(unittest.TestCase):
         # SubElement is a function so it retains _elementtree as its module.
         self.assertEqual(cET.SubElement.__module__, '_elementtree')
 
+    def test_correct_import_cET_alias(self):
+        self.assertEqual(cET_alias.SubElement.__module__, '_elementtree')
+
     def test_parser_comes_from_C(self):
         # The type of methods defined in Python code is types.FunctionType,
         # while the type of methods defined inside _elementtree is
@@ -214,6 +228,7 @@ def test_main():
     # Run the tests specific to the C implementation
     support.run_unittest(
         MiscTests,
+        TestAliasWorking,
         TestAcceleratorImported,
         SizeofTest,
         )
diff --git a/Lib/xml/etree/cElementTree.py b/Lib/xml/etree/cElementTree.py
new file mode 100644 (file)
index 0000000..368e679
--- /dev/null
@@ -0,0 +1,3 @@
+# Deprecated alias for xml.etree.ElementTree
+
+from xml.etree.ElementTree import *
diff --git a/Misc/NEWS.d/next/Library/2020-05-15-21-14-45.bpo-36543.Jt-eSX.rst b/Misc/NEWS.d/next/Library/2020-05-15-21-14-45.bpo-36543.Jt-eSX.rst
new file mode 100644 (file)
index 0000000..468c1ac
--- /dev/null
@@ -0,0 +1 @@
+Restored the deprecated :mod:`xml.etree.cElementTree` module.