Mercurial > genshi > mirror
diff genshi/builder.py @ 345:2aa7ca37ae6a trunk
Make `Attrs` instances immutable.
author | cmlenz |
---|---|
date | Fri, 10 Nov 2006 15:27:36 +0000 |
parents | 84168828b074 |
children | e1d659c87ddf |
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