Merge with PyXML 1.3:

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).
This commit is contained in:
Martin v. Löwis 2003-01-26 09:04:35 +00:00
parent 041411a1c7
commit f8de21c51b
1 changed files with 23 additions and 0 deletions

View File

@ -2,6 +2,8 @@
directly. Instead, the functions getDOMImplementation and directly. Instead, the functions getDOMImplementation and
registerDOMImplementation should be imported from xml.dom.""" 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 # This is a list of well-known implementations. Well-known names
# should be published by posting to xml-sig@python.org, and are # should be published by posting to xml-sig@python.org, and are
# subsequently recorded in this file. # subsequently recorded in this file.
@ -60,6 +62,8 @@ def getDOMImplementation(name = None, features = ()):
# User did not specify a name, try implementations in arbitrary # User did not specify a name, try implementations in arbitrary
# order, returning the one that has the required features # order, returning the one that has the required features
if isinstance(features, StringTypes):
features = _parse_feature_string(features)
for creator in registered.values(): for creator in registered.values():
dom = creator() dom = creator()
if _good_enough(dom, features): if _good_enough(dom, features):
@ -74,3 +78,22 @@ def getDOMImplementation(name = None, features = ()):
return dom return dom
raise ImportError,"no suitable DOM implementation found" 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)