[Lxml-checkins] r39379 - in lxml/trunk: . src/lxml src/lxml/tests

scoder at codespeak.net scoder at codespeak.net
Sun Feb 25 11:51:38 CET 2007


Author: scoder
Date: Sun Feb 25 11:51:35 2007
New Revision: 39379

Modified:
   lxml/trunk/CHANGES.txt
   lxml/trunk/src/lxml/etree.pyx
   lxml/trunk/src/lxml/tests/test_elementtree.py
Log:
Element.attrib.update()

Modified: lxml/trunk/CHANGES.txt
==============================================================================
--- lxml/trunk/CHANGES.txt	(original)
+++ lxml/trunk/CHANGES.txt	Sun Feb 25 11:51:35 2007
@@ -8,6 +8,8 @@
 Features added
 --------------
 
+* ``update()`` method on Element.attrib
+
 * Optimised replacement for libxml2's _xmlReconsiliateNs(). This allows lxml
   a better handling of namespaces when moving elements between documents.
 

Modified: lxml/trunk/src/lxml/etree.pyx
==============================================================================
--- lxml/trunk/src/lxml/etree.pyx	(original)
+++ lxml/trunk/src/lxml/etree.pyx	Sun Feb 25 11:51:35 2007
@@ -1374,6 +1374,12 @@
     def __delitem__(self, key):
         _delAttribute(self._element, key)
 
+    def update(self, sequence_or_dict):
+        if isinstance(sequence_or_dict, dict):
+            sequence_or_dict = dict.iteritems()
+        for name, value in sequence_or_dict:
+            self[name] = value
+
     # ACCESSORS
     def __repr__(self):
         return repr(dict( _attributeIteratorFactory(self._element, 3) ))

Modified: lxml/trunk/src/lxml/tests/test_elementtree.py
==============================================================================
--- lxml/trunk/src/lxml/tests/test_elementtree.py	(original)
+++ lxml/trunk/src/lxml/tests/test_elementtree.py	Sun Feb 25 11:51:35 2007
@@ -290,6 +290,60 @@
         self.assertEquals(None, root.get('three'))
         self.assertEquals('foo', root.get('three', 'foo'))
 
+    def test_attribute_update_dict(self):
+        XML = self.etree.XML
+        
+        root = XML('<doc alpha="Alpha" beta="Beta"/>')
+        items = root.attrib.items()
+        values.sort()
+        self.assertEquals(
+            [('alpha', 'Alpha'), ('beta', 'Beta')],
+            values)
+
+        root.attrib.update({'alpha' : 'test', 'gamma' : 'Gamma'})
+
+        items = root.attrib.items()
+        values.sort()
+        self.assertEquals(
+            [('alpha', 'test'), ('beta', 'Beta'), ('gamma' : 'Gamma')],
+            values)
+
+    def test_attribute_update_sequence(self):
+        XML = self.etree.XML
+        
+        root = XML('<doc alpha="Alpha" beta="Beta"/>')
+        items = root.attrib.items()
+        values.sort()
+        self.assertEquals(
+            [('alpha', 'Alpha'), ('beta', 'Beta')],
+            values)
+
+        root.attrib.update({'alpha' : 'test', 'gamma' : 'Gamma'}.items())
+
+        items = root.attrib.items()
+        values.sort()
+        self.assertEquals(
+            [('alpha', 'test'), ('beta', 'Beta'), ('gamma' : 'Gamma')],
+            values)
+
+    def test_attribute_update_iter(self):
+        XML = self.etree.XML
+        
+        root = XML('<doc alpha="Alpha" beta="Beta"/>')
+        items = root.attrib.items()
+        values.sort()
+        self.assertEquals(
+            [('alpha', 'Alpha'), ('beta', 'Beta')],
+            values)
+
+        root.attrib.update({'alpha' : 'test', 'gamma' : 'Gamma'}.iteritems())
+
+        items = root.attrib.items()
+        values.sort()
+        self.assertEquals(
+            [('alpha', 'test'), ('beta', 'Beta'), ('gamma' : 'Gamma')],
+            values)
+
     def test_attribute_keys(self):
         XML = self.etree.XML
         


More information about the lxml-checkins mailing list