aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Gilbert <floppym@gentoo.org>2018-06-17 11:14:43 -0400
committerMichał Górny <mgorny@gentoo.org>2021-01-19 23:59:05 +0100
commitd16b3c7eb7d770bf19595b97549e11c0c5d44093 (patch)
tree74ddb5be3d2c519472088a5dc8108d59ec5c37aa
parentARM OABI (diff)
downloadcpython-d16b3c7eb7d770bf19595b97549e11c0c5d44093.tar.gz
cpython-d16b3c7eb7d770bf19595b97549e11c0c5d44093.tar.bz2
cpython-d16b3c7eb7d770bf19595b97549e11c0c5d44093.zip
use_pyxml
-rw-r--r--Lib/xml/__init__.py33
1 files changed, 18 insertions, 15 deletions
diff --git a/Lib/xml/__init__.py b/Lib/xml/__init__.py
index deed983d976..e6c332b8aba 100644
--- a/Lib/xml/__init__.py
+++ b/Lib/xml/__init__.py
@@ -22,20 +22,23 @@ __all__ = ["dom", "parsers", "sax", "etree"]
_MINIMUM_XMLPLUS_VERSION = (0, 8, 4)
-try:
+def use_pyxml():
import _xmlplus
-except ImportError:
- pass
-else:
- try:
- v = _xmlplus.version_info
- except AttributeError:
- # _xmlplus is too old; ignore it
- pass
+ v = _xmlplus.version_info
+ if v >= _MINIMUM_XMLPLUS_VERSION:
+ import sys
+ _xmlplus.__path__.extend(__path__)
+ sys.modules[__name__] = _xmlplus
+ cleared_modules = []
+ redefined_modules = []
+ for module in sys.modules:
+ if module.startswith("xml.") and not module.startswith(("xml.marshal", "xml.schema", "xml.utils", "xml.xpath", "xml.xslt")):
+ cleared_modules.append(module)
+ if module.startswith(("xml.__init__", "xml.dom", "xml.parsers", "xml.sax")) and sys.modules[module] is not None:
+ redefined_modules.append(module)
+ for module in cleared_modules:
+ del sys.modules[module]
+ for module in sorted(redefined_modules):
+ __import__(module)
else:
- if v >= _MINIMUM_XMLPLUS_VERSION:
- import sys
- _xmlplus.__path__.extend(__path__)
- sys.modules[__name__] = _xmlplus
- else:
- del v
+ raise ImportError("PyXML too old: %s" % ".".join(str(x) for x in v))