[Lxml-checkins] r39463 - in lxml/trunk: . src/lxml src/lxml/tests
scoder at codespeak.net
scoder at codespeak.net
Mon Feb 26 18:20:43 CET 2007
Author: scoder
Date: Mon Feb 26 18:20:36 2007
New Revision: 39463
Modified:
lxml/trunk/CHANGES.txt
lxml/trunk/src/lxml/objectify.pyx
lxml/trunk/src/lxml/tests/test_objectify.py
Log:
test and fix for 'element[item]' assignment in objectify: 'text' etc. were not special cased
Modified: lxml/trunk/CHANGES.txt
==============================================================================
--- lxml/trunk/CHANGES.txt (original)
+++ lxml/trunk/CHANGES.txt Mon Feb 26 18:20:36 2007
@@ -24,6 +24,8 @@
Bugs fixed
----------
+* Item assignments to special names like ``element["text"]`` failed
+
* Possible memory leaks in namespace handling when moving elements between
documents
Modified: lxml/trunk/src/lxml/objectify.pyx
==============================================================================
--- lxml/trunk/src/lxml/objectify.pyx (original)
+++ lxml/trunk/src/lxml/objectify.pyx Mon Feb 26 18:20:36 2007
@@ -289,7 +289,13 @@
cdef tree.xmlNode* c_parent
cdef tree.xmlNode* c_node
if python._isString(key):
- self.__setattr__(key, value)
+ key = _buildChildTag(self, key)
+ try:
+ element = _lookupChild(self, key)
+ except AttributeError:
+ _appendValue(self, key, value)
+ else:
+ _replaceElement(element, value)
return
c_self_node = self._c_node
Modified: lxml/trunk/src/lxml/tests/test_objectify.py
==============================================================================
--- lxml/trunk/src/lxml/tests/test_objectify.py (original)
+++ lxml/trunk/src/lxml/tests/test_objectify.py Mon Feb 26 18:20:36 2007
@@ -208,6 +208,37 @@
self.assertEquals(["TEST"],
[ c.text for c in root.c ])
+ def test_setitem_string(self):
+ # make sure strings are set as children
+ Element = self.Element
+ SubElement = self.etree.SubElement
+ root = Element("root")
+ root["c"] = "TEST"
+ self.assertEquals(["TEST"],
+ [ c.text for c in root.c ])
+
+ def test_setitem_string_special(self):
+ # make sure 'text' etc. are set as children
+ Element = self.Element
+ SubElement = self.etree.SubElement
+ root = Element("root")
+
+ root["text"] = "TEST"
+ self.assertEquals(["TEST"],
+ [ c.text for c in root["text"] ])
+
+ root["tail"] = "TEST"
+ self.assertEquals(["TEST"],
+ [ c.text for c in root["tail"] ])
+
+ root["pyval"] = "TEST"
+ self.assertEquals(["TEST"],
+ [ c.text for c in root["pyval"] ])
+
+ root["tag"] = "TEST"
+ self.assertEquals(["TEST"],
+ [ c.text for c in root["tag"] ])
+
def test_findall(self):
XML = self.XML
root = XML('<a><b><c/></b><b/><c><b/></c></a>')
More information about the lxml-checkins
mailing list