[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