changeset 541:078483c8fbbf

Added a parent & root properties to etree Elements to make nagigation easier
author digitalxero
date Thu, 25 Mar 2010 15:48:49 -0600
parents 69f2abad0d92
children 7d60d6747209
files orpg/external/etree/ElementTree.py
diffstat 1 files changed, 30 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/orpg/external/etree/ElementTree.py	Thu Mar 25 14:36:32 2010 -0600
+++ b/orpg/external/etree/ElementTree.py	Thu Mar 25 15:48:49 2010 -0600
@@ -163,6 +163,8 @@
     # (Attribute) Element tag.
 
     tag = None
+    _parent = None
+    _root = None
 
     ##
     # (Attribute) Element attribute dictionary.  Where possible, use
@@ -191,6 +193,7 @@
         self.tag = tag
         self.attrib = attrib
         self._children = []
+        self._root = self
 
     def __repr__(self):
         return "<Element %s at %x>" % (self.tag, id(self))
@@ -233,6 +236,8 @@
 
     def __setitem__(self, index, element):
         assert iselement(element)
+        element._parent = self
+        element._root = self.root
         self._children[index] = element
 
     ##
@@ -265,6 +270,8 @@
     def __setslice__(self, start, stop, elements):
         for element in elements:
             assert iselement(element)
+            element._parent = self
+            element._root = self.root
         self._children[start:stop] = list(elements)
 
     ##
@@ -284,6 +291,8 @@
 
     def append(self, element):
         assert iselement(element)
+        element._parent = self
+        element._root = self.root
         self._children.append(element)
 
     ##
@@ -294,6 +303,8 @@
 
     def insert(self, index, element):
         assert iselement(element)
+        element._parent = self
+        element._root = self.root
         self._children.insert(index, element)
 
     ##
@@ -307,6 +318,8 @@
 
     def remove(self, element):
         assert iselement(element)
+        element._parent = None
+        element._root = element
         self._children.remove(element)
 
     ##
@@ -387,7 +400,8 @@
     def clear(self):
         self.attrib.clear()
         self._children = []
-        self.text = self.tail = None
+        self._parent = self.text = self.tail = None
+        self._root = self
 
     ##
     # Gets an element attribute.
@@ -452,6 +466,15 @@
             nodes.extend(node.getiterator(tag))
         return nodes
 
+    #Properties
+    def _get_root(self):
+        return self._root
+    root = property(_get_root)
+
+    def _get_parent(self):
+        return self._parent
+    parent = property(_get_parent)
+
 # compatibility
 _Element = _ElementInterface
 
@@ -568,6 +591,9 @@
     def __init__(self, element=None, file=None):
         assert element is None or iselement(element)
         self._root = element # first node
+        if self._root:
+            self._root.root = element
+            self._root.parent = None
         if file:
             self.parse(file)
 
@@ -590,6 +616,8 @@
     def _setroot(self, element):
         assert iselement(element)
         self._root = element
+        self._root.root = element
+        self._root.parent = None
 
     ##
     # Loads an external XML document into this element tree.
@@ -613,7 +641,7 @@
                 parser.feed(data)
         finally:
             self._root = parser.close()
-            
+
         return self._root
 
     ##