changeset 825:9cf631c0eace

Minor simplification and performance improvement to the flattening of dynamic attribute values. Thanks to Christoph Zwerschke for the suggestion (see #295).
author cmlenz
date Thu, 12 Mar 2009 08:11:08 +0000
parents 01922ac166c0
children 0319a8874510
files genshi/template/base.py genshi/template/tests/markup.py
diffstat 2 files changed, 10 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/genshi/template/base.py
+++ b/genshi/template/base.py
@@ -527,14 +527,13 @@
                 new_attrs = []
                 for name, value in attrs:
                     if type(value) is list: # this is an interpolated string
-                        values = []
-                        for event in self._flatten(value, ctxt, **vars):
-                            if event[0] is TEXT:
-                                values.append(event[1])
-                        value = [x for x in values if x is not None]
-                        if not value:
+                        values = [event[1]
+                            for event in self._flatten(value, ctxt, **vars)
+                            if event[0] is TEXT and event[1] is not None
+                        ]
+                        if not values:
                             continue
-                        value = u''.join(value)
+                        value = u''.join(values)
                     new_attrs.append((name, value))
                 yield kind, (tag, Attrs(new_attrs)), pos
 
--- a/genshi/template/tests/markup.py
+++ b/genshi/template/tests/markup.py
@@ -75,6 +75,10 @@
         tmpl = MarkupTemplate('<root attr=""/>')
         self.assertEqual('<root attr=""/>', str(tmpl.generate()))
 
+    def test_empty_attr_interpolated(self):
+        tmpl = MarkupTemplate('<root attr="$attr"/>')
+        self.assertEqual('<root attr=""/>', str(tmpl.generate(attr='')))
+
     def test_bad_directive_error(self):
         xml = '<p xmlns:py="http://genshi.edgewall.org/" py:do="nothing" />'
         try:
Copyright (C) 2012-2017 Edgewall Software