diff options
author | Mike Gilbert <floppym@gentoo.org> | 2018-06-17 11:14:43 -0400 |
---|---|---|
committer | Michał Górny <mgorny@gentoo.org> | 2021-01-19 23:59:05 +0100 |
commit | d16b3c7eb7d770bf19595b97549e11c0c5d44093 (patch) | |
tree | 74ddb5be3d2c519472088a5dc8108d59ec5c37aa | |
parent | ARM OABI (diff) | |
download | cpython-d16b3c7eb7d770bf19595b97549e11c0c5d44093.tar.gz cpython-d16b3c7eb7d770bf19595b97549e11c0c5d44093.tar.bz2 cpython-d16b3c7eb7d770bf19595b97549e11c0c5d44093.zip |
use_pyxml
-rw-r--r-- | Lib/xml/__init__.py | 33 |
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)) |