]> granicus.if.org Git - python/commitdiff
Merge with PyXML 1.3:
authorMartin v. Löwis <martin@v.loewis.de>
Sun, 26 Jan 2003 09:04:35 +0000 (09:04 +0000)
committerMartin v. Löwis <martin@v.loewis.de>
Sun, 26 Jan 2003 09:04:35 +0000 (09:04 +0000)
Add support for the DOM Level 3 (draft) DOMImplementationSource interface
to the xml.dom and xml.dom.minidom modules.  Note API issue: the draft spec
says to return null when there is no suitable implementation, while the
Python getDOMImplementation() function raises ImportError (minor).

Lib/xml/dom/domreg.py

index 14b87d6a99821e94d205d9a30c0a9274a467dd7f..0e6e615d35eea4bf97979bff296009e36e4ba531 100644 (file)
@@ -2,6 +2,8 @@
 directly. Instead, the functions getDOMImplementation and
 registerDOMImplementation should be imported from xml.dom."""
 
+from xml.dom.minicompat import *  # isinstance, StringTypes
+
 # This is a list of well-known implementations.  Well-known names
 # should be published by posting to xml-sig@python.org, and are
 # subsequently recorded in this file.
@@ -60,6 +62,8 @@ def getDOMImplementation(name = None, features = ()):
 
     # User did not specify a name, try implementations in arbitrary
     # order, returning the one that has the required features
+    if isinstance(features, StringTypes):
+        features = _parse_feature_string(features)
     for creator in registered.values():
         dom = creator()
         if _good_enough(dom, features):
@@ -74,3 +78,22 @@ def getDOMImplementation(name = None, features = ()):
             return dom
 
     raise ImportError,"no suitable DOM implementation found"
+
+def _parse_feature_string(s):
+    features = []
+    parts = s.split()
+    i = 0
+    length = len(parts)
+    while i < length:
+        feature = parts[i]
+        if feature[0] in "0123456789":
+            raise ValueError, "bad feature name: " + `feature`
+        i = i + 1
+        version = None
+        if i < length:
+            v = parts[i]
+            if v[0] in "0123456789":
+                i = i + 1
+                version = v
+        features.append((feature, version))
+    return tuple(features)