[Checkins] SVN: z3c.pt/trunk/ Generalized ElementTree-import.
Malthe Borch
mborch at gmail.com
Tue Aug 12 14:37:41 EDT 2008
Log message for revision 89752:
Generalized ElementTree-import.
Changed:
U z3c.pt/trunk/CHANGES.txt
U z3c.pt/trunk/src/z3c/pt/clauses.py
U z3c.pt/trunk/src/z3c/pt/etree.py
-=-
Modified: z3c.pt/trunk/CHANGES.txt
===================================================================
--- z3c.pt/trunk/CHANGES.txt 2008-08-12 18:25:59 UTC (rev 89751)
+++ z3c.pt/trunk/CHANGES.txt 2008-08-12 18:37:40 UTC (rev 89752)
@@ -4,6 +4,10 @@
Version 1.0dev
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+- Generalized ElementTree-import to allow both Python 2.5's
+ ``xml.etree`` module and the standalone ``ElementTree``
+ package. [malthe]
+
- CDATA sections are now correctly preserved when using expression
interpolation. [malthe]
Modified: z3c.pt/trunk/src/z3c/pt/clauses.py
===================================================================
--- z3c.pt/trunk/src/z3c/pt/clauses.py 2008-08-12 18:25:59 UTC (rev 89751)
+++ z3c.pt/trunk/src/z3c/pt/clauses.py 2008-08-12 18:37:40 UTC (rev 89752)
@@ -2,6 +2,7 @@
from z3c.pt import types
from z3c.pt import config
+from z3c.pt import etree
from z3c.pt.utils import unicode_required_flag
class Assign(object):
@@ -761,14 +762,15 @@
# validate XML if enabled
if config.VALIDATION:
try:
- import xml.etree
+ etree.import_elementtree()
except ImportError:
raise ImportError(
- "xml.etree (required when XML validation is enabled).")
-
- stream.write("from xml.etree import ElementTree as ET")
- stream.write("ET.fromstring('<div>%s</div>' % _urf)")
+ "ElementTree (required when XML validation is enabled).")
+ stream.write("import z3c.pt.etree")
+ stream.write("_ET = z3c.pt.etree.import_elementtree()")
+ stream.write("_ET.fromstring('<div>%s</div>' % _urf)")
+
def end(self, stream):
if self.assign:
self.assign.end(stream)
Modified: z3c.pt/trunk/src/z3c/pt/etree.py
===================================================================
--- z3c.pt/trunk/src/z3c/pt/etree.py 2008-08-12 18:25:59 UTC (rev 89751)
+++ z3c.pt/trunk/src/z3c/pt/etree.py 2008-08-12 18:37:40 UTC (rev 89752)
@@ -4,6 +4,17 @@
import cgi
from StringIO import StringIO
+def import_elementtree():
+ try:
+ import elementtree.ElementTree as ET
+ except ImportError:
+ try:
+ import cElementTree as ET
+ except ImportError:
+ import xml.etree.ElementTree as ET
+
+ return ET
+
try:
import lxml.etree
@@ -138,9 +149,9 @@
return root, tree.docinfo.doctype
except ImportError:
- import xml.etree.ElementTree
-
- class ElementBase(object, xml.etree.ElementTree._ElementInterface):
+ ET = import_elementtree()
+
+ class ElementBase(object, ET._ElementInterface):
_parent = None
def __new__(cls, tag, attrs=None):
@@ -150,17 +161,17 @@
if attrs is None:
attrs = {}
- xml.etree.ElementTree._ElementInterface.__init__(self, tag, attrs)
+ ET._ElementInterface.__init__(self, tag, attrs)
def getparent(self):
return self._parent
def insert(self, position, element):
element._parent = self
- xml.etree.ElementTree._ElementInterface.insert(self, position, element)
+ ET._ElementInterface.insert(self, position, element)
def tostring(self):
- return xml.etree.ElementTree.tostring(self)
+ return ET.tostring(self)
def xpath(self, expression, namespaces={}):
return []
@@ -173,18 +184,18 @@
def ns_lookup(ns):
return namespaces.setdefault(ns, {})
- class TreeBuilder(xml.etree.ElementTree.TreeBuilder):
+ class TreeBuilder(ET.TreeBuilder):
def start(self, tag, attrs):
if len(self._elem):
parent = self._elem[-1]
else:
parent = None
- elem = xml.etree.ElementTree.TreeBuilder.start(self, tag, attrs)
+ elem = ET.TreeBuilder.start(self, tag, attrs)
elem._parent = parent
- class XMLParser(xml.etree.ElementTree.XMLParser):
+ class XMLParser(ET.XMLParser):
def __init__(self, **kwargs):
- xml.etree.ElementTree.XMLParser.__init__(self, **kwargs)
+ ET.XMLParser.__init__(self, **kwargs)
# this makes up for ET's lack of support for comments and
# processing instructions
More information about the Checkins
mailing list