[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