Mercurial > openrpg
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 ##