gh-76007: Deprecate VERSION in xml.etree.ElementTree & version in xml.sax.expatreader & xml.sax.handler (#142898)

This commit is contained in:
Hugo van Kemenade
2025-12-18 16:22:23 +02:00
committed by GitHub
parent 0f01530bd5
commit d2abd5733b
8 changed files with 70 additions and 13 deletions
+6 -3
View File
@@ -1,9 +1,9 @@
Pending removal in Python 3.20
------------------------------
* The ``__version__`` attribute has been deprecated in these standard library
modules and will be removed in Python 3.20.
Use :py:data:`sys.version_info` instead.
* The ``__version__``, ``version`` and ``VERSION`` attributes have been
deprecated in these standard library modules and will be removed in
Python 3.20. Use :py:data:`sys.version_info` instead.
- :mod:`argparse`
- :mod:`csv`
@@ -24,6 +24,9 @@ Pending removal in Python 3.20
- :mod:`tkinter.font`
- :mod:`tkinter.ttk`
- :mod:`wsgiref.simple_server`
- :mod:`xml.etree.ElementTree`
- :mod:`!xml.sax.expatreader`
- :mod:`xml.sax.handler`
- :mod:`zlib`
(Contributed by Hugo van Kemenade and Stan Ulbrych in :gh:`76007`.)
+6 -3
View File
@@ -1104,9 +1104,9 @@ New deprecations
* ``__version__``
* The ``__version__`` attribute has been deprecated in these standard library
modules and will be removed in Python 3.20.
Use :py:data:`sys.version_info` instead.
* The ``__version__``, ``version`` and ``VERSION`` attributes have been
deprecated in these standard library modules and will be removed in
Python 3.20. Use :py:data:`sys.version_info` instead.
- :mod:`argparse`
- :mod:`csv`
@@ -1127,6 +1127,9 @@ New deprecations
- :mod:`tkinter.font`
- :mod:`tkinter.ttk`
- :mod:`wsgiref.simple_server`
- :mod:`xml.etree.ElementTree`
- :mod:`!xml.sax.expatreader`
- :mod:`xml.sax.handler`
- :mod:`zlib`
(Contributed by Hugo van Kemenade and Stan Ulbrych in :gh:`76007`.)
+12
View File
@@ -1573,5 +1573,17 @@ class TestModuleAll(unittest.TestCase):
check__all__(self, sax, extra=extra)
class TestModule(unittest.TestCase):
def test_deprecated__version__and__date__(self):
for module in (sax.expatreader, sax.handler):
with self.subTest(module=module):
with self.assertWarnsRegex(
DeprecationWarning,
"'version' is deprecated and slated for removal in Python 3.20",
) as cm:
getattr(module, "version")
self.assertEqual(cm.filename, __file__)
if __name__ == "__main__":
unittest.main()
+13
View File
@@ -4705,6 +4705,19 @@ class C14NTest(unittest.TestCase):
# --------------------------------------------------------------------
class TestModule(unittest.TestCase):
def test_deprecated_version(self):
with self.assertWarnsRegex(
DeprecationWarning,
"'VERSION' is deprecated and slated for removal in Python 3.20",
) as cm:
getattr(ET, "VERSION")
self.assertEqual(cm.filename, __file__)
# --------------------------------------------------------------------
def setUpModule(module=None):
# When invoked without a module, runs the Python ET tests by loading pyET.
# Otherwise, uses the given module as the ET.
+11 -3
View File
@@ -83,15 +83,12 @@ __all__ = [
"SubElement",
"tostring", "tostringlist",
"TreeBuilder",
"VERSION",
"XML", "XMLID",
"XMLParser", "XMLPullParser",
"register_namespace",
"canonicalize", "C14NWriterTarget",
]
VERSION = "1.3.0"
import sys
import re
import warnings
@@ -2104,3 +2101,14 @@ except ImportError:
pass
else:
_set_factories(Comment, ProcessingInstruction)
# --------------------------------------------------------------------
def __getattr__(name):
if name == "VERSION":
from warnings import _deprecated
_deprecated("VERSION", remove=(3, 20))
return "1.3.0" # Do not change
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
+10 -2
View File
@@ -3,8 +3,6 @@ SAX driver for the pyexpat C module. This driver works with
pyexpat.__version__ == '2.22'.
"""
version = "0.20"
from xml.sax._exceptions import *
from xml.sax.handler import feature_validation, feature_namespaces
from xml.sax.handler import feature_namespace_prefixes
@@ -446,6 +444,16 @@ def create_parser(*args, **kwargs):
# ---
def __getattr__(name):
if name == "version":
from warnings import _deprecated
_deprecated("version", remove=(3, 20))
return "0.20" # Do not change
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
# ---
if __name__ == "__main__":
import xml.sax.saxutils
p = create_parser()
+9 -2
View File
@@ -9,8 +9,6 @@ of the interfaces.
$Id$
"""
version = '2.0beta'
#============================================================================
#
# HANDLER INTERFACES
@@ -385,3 +383,12 @@ class LexicalHandler:
def endCDATA(self):
"""Reports the end of a CDATA marked section."""
def __getattr__(name):
if name == "version":
from warnings import _deprecated
_deprecated("version", remove=(3, 20))
return "2.0beta" # Do not change
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
@@ -0,0 +1,3 @@
Deprecate ``VERSION`` from :mod:`xml.etree.ElementTree` and ``version`` from
:mod:`!xml.sax.expatreader` and :mod:`xml.sax.handler`. Patch by Hugo van
Kemenade.