# HG changeset patch # User cmlenz # Date 1156511559 0 # Node ID 6addf7af09f6a221b841ce04387005b425aa68f5 # Parent 4140bff0d7d204ead95e5ec2b8a279740b727fb2 Fix for handling function calls with star/dstar arguments in expressions. Closes #42. Many thanks to David Fraser for reporting the problem and providing a patch! diff --git a/markup/eval.py b/markup/eval.py --- a/markup/eval.py +++ b/markup/eval.py @@ -243,11 +243,9 @@ node.node = self.visit(node.node, *args, **kwargs) node.args = map(lambda x: self.visit(x, *args, **kwargs), node.args) if node.star_args: - node.star_args = map(lambda x: self.visit(x, *args, **kwargs), - node.star_args) + node.star_args = self.visit(node.star_args, *args, **kwargs) if node.dstar_args: - node.dstart_args = map(lambda x: self.visit(x, *args, **kwargs), - node.dstar_args) + node.dstar_args = self.visit(node.dstar_args, *args, **kwargs) return node def visitLambda(self, node, *args, **kwargs): diff --git a/markup/tests/eval.py b/markup/tests/eval.py --- a/markup/tests/eval.py +++ b/markup/tests/eval.py @@ -200,6 +200,16 @@ self.assertEqual(42, Expression("foo(x=bar)").evaluate({'foo': lambda x: x, 'bar': 42})) + def test_call_star_args(self): + self.assertEqual(42, Expression("foo(*bar)").evaluate({'foo': lambda x: x, + 'bar': [42]})) + + def test_call_dstar_args(self): + def foo(x): + return x + self.assertEqual(42, Expression("foo(**bar)").evaluate({'foo': foo, + 'bar': {"x": 42}})) + def test_call_function_without_params(self): self.assertEqual(42, Expression("foo").evaluate({'foo': lambda: 42})) data = {'foo': 'bar'}