diff genshi/builder.py @ 345:8e75b83d3e71

Make `Attrs` instances immutable.
author cmlenz
date Fri, 10 Nov 2006 15:27:36 +0000
parents 24757b771651
children d8c5045b547a
line wrap: on
line diff
--- a/genshi/builder.py
+++ b/genshi/builder.py
@@ -73,6 +73,16 @@
         return Stream(self._generate())
 
 
+def _value_to_unicode(value):
+    if isinstance(value, unicode):
+        return value
+    return unicode(value)
+
+def _kwargs_to_attrs(kwargs):
+    return [(k.rstrip('_').replace('_', '-'), _value_to_unicode(v))
+            for k, v in kwargs.items() if v is not None]
+
+
 class Element(Fragment):
     """Simple XML output generator based on the builder pattern.
 
@@ -157,20 +167,10 @@
     def __init__(self, tag_, **attrib):
         Fragment.__init__(self)
         self.tag = QName(tag_)
-        self.attrib = Attrs()
-        for attr, value in attrib.items():
-            if value is not None:
-                if not isinstance(value, basestring):
-                    value = unicode(value)
-                self.attrib.append((QName(attr.rstrip('_').replace('_', '-')),
-                                    value))
+        self.attrib = Attrs(_kwargs_to_attrs(attrib))
 
     def __call__(self, *args, **kwargs):
-        for attr, value in kwargs.items():
-            if value is not None:
-                if not isinstance(value, basestring):
-                    value = unicode(value)
-                self.attrib.set(attr.rstrip('_').replace('_', '-'), value)
+        self.attrib |= Attrs(_kwargs_to_attrs(kwargs))
         Fragment.__call__(self, *args)
         return self
 
Copyright (C) 2012-2017 Edgewall Software