summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Heimes <christian@python.org>2021-01-12 15:50:08 +0100
committerChristian Heimes <christian@python.org>2021-01-12 17:50:53 +0100
commitaf1f4cf0c1bd94bc6c8debbd500b02daede92d31 (patch)
treea20f3a0ab1be063b864e3b923a1deb3b78c8b917
parent5a928e5f90b58b96a90180bc3c81e293af387ff8 (diff)
downloaddefusedxml-git-af1f4cf0c1bd94bc6c8debbd500b02daede92d31.tar.gz
Re-add cElementTree module and deprecate it
``xml.etree.ElementTree`` was re-added before Python 3.9.0 release. The alias will be removed in a future release. Signed-off-by: Christian Heimes <christian@python.org>
-rw-r--r--README.md3
-rw-r--r--README.txt3
-rw-r--r--defusedxml/__init__.py10
-rw-r--r--defusedxml/cElementTree.py11
-rw-r--r--defusedxml/common.py2
-rw-r--r--defusedxml/lxml.py2
-rw-r--r--tests.py20
7 files changed, 28 insertions, 23 deletions
diff --git a/README.md b/README.md
index dc23628..ad06452 100644
--- a/README.md
+++ b/README.md
@@ -275,7 +275,8 @@ defuse\_stdlib() (*experimental*)
### defusedxml.cElementTree
-**NOTE** `defusedxml.cElementTree` is not available in Python 3.9+
+**NOTE** `defusedxml.cElementTree` is deprecated and will be removed in
+a future release. Import from `defusedxml.ElementTree` instead.
parse(), iterparse(), fromstring(), XMLParser
diff --git a/README.txt b/README.txt
index 8844fb7..eda36d5 100644
--- a/README.txt
+++ b/README.txt
@@ -317,7 +317,8 @@ defuse_stdlib() (*experimental*)
defusedxml.cElementTree
-----------------------
-**NOTE** ``defusedxml.cElementTree`` is not available in Python 3.9+
+**NOTE** ``defusedxml.cElementTree`` is deprecated and will be removed in a
+future release. Import from ``defusedxml.ElementTree`` instead.
parse(), iterparse(), fromstring(), XMLParser
diff --git a/defusedxml/__init__.py b/defusedxml/__init__.py
index 95ddeb9..c154a4d 100644
--- a/defusedxml/__init__.py
+++ b/defusedxml/__init__.py
@@ -7,6 +7,8 @@
"""
from __future__ import print_function, absolute_import
+import warnings
+
from .common import (
DefusedXmlException,
DTDForbidden,
@@ -14,7 +16,6 @@ from .common import (
ExternalReferenceForbidden,
NotSupportedError,
_apply_defusing,
- _HAVE_CELEMENTTREE,
)
@@ -25,10 +26,8 @@ def defuse_stdlib():
"""
defused = {}
- if _HAVE_CELEMENTTREE:
+ with warnings.catch_warnings():
from . import cElementTree
- else:
- cElementTree = None
from . import ElementTree
from . import minidom
from . import pulldom
@@ -41,6 +40,7 @@ def defuse_stdlib():
defused[xmlrpc] = None
defused_mods = [
+ cElementTree,
ElementTree,
minidom,
pulldom,
@@ -48,8 +48,6 @@ def defuse_stdlib():
expatbuilder,
expatreader,
]
- if _HAVE_CELEMENTTREE:
- defused_mods.append(cElementTree)
for defused_mod in defused_mods:
stdlib_mod = _apply_defusing(defused_mod)
diff --git a/defusedxml/cElementTree.py b/defusedxml/cElementTree.py
index 95c3056..2b6364e 100644
--- a/defusedxml/cElementTree.py
+++ b/defusedxml/cElementTree.py
@@ -7,10 +7,9 @@
"""
from __future__ import absolute_import
-from .common import _generate_etree_functions, _HAVE_CELEMENTTREE
+import warnings
-if not _HAVE_CELEMENTTREE:
- raise ImportError("cElementTree has been removed from Python 3.9")
+from .common import _generate_etree_functions
from xml.etree.cElementTree import TreeBuilder as _TreeBuilder
from xml.etree.cElementTree import parse as _parse
@@ -24,6 +23,12 @@ from .ElementTree import DefusedXMLParser
__origin__ = "xml.etree.cElementTree"
+warnings.warn(
+ "defusedxml.cElementTree is deprecated, import from defusedxml.ElementTree instead.",
+ category=DeprecationWarning,
+ stacklevel=2,
+)
+
# XMLParse is a typo, keep it for backwards compatibility
XMLTreeBuilder = XMLParse = XMLParser = DefusedXMLParser
diff --git a/defusedxml/common.py b/defusedxml/common.py
index 4bd573a..5ceda1f 100644
--- a/defusedxml/common.py
+++ b/defusedxml/common.py
@@ -9,8 +9,6 @@ import sys
import xml.parsers.expat
PY3 = sys.version_info[0] == 3
-# Python 3.9 removed cElementTree module
-_HAVE_CELEMENTTREE = sys.version_info < (3, 9, 0)
# Fail early when pyexpat is not installed correctly
if not hasattr(xml.parsers.expat, "ParserCreate"):
diff --git a/defusedxml/lxml.py b/defusedxml/lxml.py
index ec22e0c..99d5be9 100644
--- a/defusedxml/lxml.py
+++ b/defusedxml/lxml.py
@@ -24,7 +24,7 @@ tostring = _etree.tostring
warnings.warn(
- "defusedxml.lxml is no longer supported and will be removed in a " "future release.",
+ "defusedxml.lxml is no longer supported and will be removed in a future release.",
category=DeprecationWarning,
stacklevel=2,
)
diff --git a/tests.py b/tests.py
index 188200a..f8b9274 100644
--- a/tests.py
+++ b/tests.py
@@ -18,13 +18,15 @@ from defusedxml import (
ExternalReferenceForbidden,
NotSupportedError,
)
-from defusedxml.common import PY3, _HAVE_CELEMENTTREE
+from defusedxml.common import PY3
-if _HAVE_CELEMENTTREE:
+if sys.version_info < (3, 7):
+ warnings.filterwarnings("once", category=DeprecationWarning)
+
+
+with warnings.catch_warnings(record=True) as cetree_warnings:
from defusedxml import cElementTree
-else:
- cElementTree = None
try:
@@ -33,10 +35,6 @@ except ImportError:
gzip = None
-if sys.version_info < (3, 7):
- warnings.filterwarnings("once", category=DeprecationWarning)
-
-
try:
with warnings.catch_warnings(record=True) as lxml_warnings:
from defusedxml import lxml
@@ -211,10 +209,14 @@ class TestDefusedElementTree(BaseTests):
assert self.module.XMLParse is parser
-@unittest.skipUnless(_HAVE_CELEMENTTREE, "Python 3.9 has removed cElementTree")
class TestDefusedcElementTree(TestDefusedElementTree):
module = cElementTree
+ def test_celementtree_warnings(self):
+ self.assertTrue(cetree_warnings)
+ self.assertEqual(cetree_warnings[0].category, DeprecationWarning)
+ self.assertIn("tests.py", cetree_warnings[0].filename)
+
class TestDefusedMinidom(BaseTests):
module = minidom