aboutsummaryrefslogtreecommitdiff
blob: 133967baee8bec8bdf01477462fe1bcd76b3cbad (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
diff -ur Python-2.7.1.orig//Lib/xml/__init__.py Python-2.7.1/Lib/xml/__init__.py
--- Python-2.7.1.orig//Lib/xml/__init__.py	2009-10-09 11:11:36.000000000 +0800
+++ Python-2.7.1/Lib/xml/__init__.py	2011-11-14 23:36:08.006937770 +0800
@@ -22,20 +22,22 @@
 _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
-    else:
-        if v >= _MINIMUM_XMLPLUS_VERSION:
-            import sys
-            _xmlplus.__path__.extend(__path__)
-            sys.modules[__name__] = _xmlplus
-        else:
-            del v
+    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)
+        raise ImportError("PyXML too old: %s" % ".".join(str(x) for x in v))