changeset 135:9d7ca94133be stable-0.1.x

0.1.x branch: Merged bugfix for expression evaluation from [167].
author cmlenz
date Sun, 06 Aug 2006 19:51:35 +0000
parents ebd3a65e0d40
children
files markup/eval.py markup/tests/eval.py
diffstat 2 files changed, 11 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/markup/eval.py
+++ b/markup/eval.py
@@ -289,5 +289,5 @@
     def visitSubscript(self, node, *args, **kwargs):
         return ast.CallFunc(ast.Name('_lookup_item'),
             [ast.Name('data'), self.visit(node.expr, *args, **kwargs),
-             ast.Tuple(map(self.visit, node.subs, *args, **kwargs))]
+             ast.Tuple(map(lambda x: self.visit(x, *args, **kwargs), node.subs))]
         )
--- a/markup/tests/eval.py
+++ b/markup/tests/eval.py
@@ -214,6 +214,16 @@
         self.assertEqual([2, 3, 4, 5, 6],
                          expr.evaluate({'numbers': range(5), 'offset': 2}))
 
+    def test_list_comprehension_with_getattr(self):
+        items = [{'name': 'a', 'value': 1}, {'name': 'b', 'value': 2}]
+        expr = Expression("[i.name for i in items if i.value > 1]")
+        self.assertEqual(['b'], expr.evaluate({'items': items}))
+
+    def test_list_comprehension_with_getitem(self):
+        items = [{'name': 'a', 'value': 1}, {'name': 'b', 'value': 2}]
+        expr = Expression("[i['name'] for i in items if i['value'] > 1]")
+        self.assertEqual(['b'], expr.evaluate({'items': items}))
+
 
 def suite():
     suite = unittest.TestSuite()
Copyright (C) 2012-2017 Edgewall Software