# HG changeset patch # User cmlenz # Date 1154893895 0 # Node ID ce04d361f8943cd52bbcb93cf56074fcb200d8d2 # Parent 0987adde333adede1cb32b08a745d64b068262ad 0.1.x branch: Merged bugfix for expression evaluation from [167]. diff --git a/markup/eval.py b/markup/eval.py --- 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))] ) diff --git a/markup/tests/eval.py b/markup/tests/eval.py --- 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()