# HG changeset patch # User mgood # Date 1166484488 0 # Node ID a056613621abd3c3efe4ca5c78b76d0a4b06de89 # Parent 5c2156e0cd41e6e7465cc4a296e24a45cb5ea5b2 add support for Python 2.5 conditional expressions (fixes #74) diff --git a/genshi/template/eval.py b/genshi/template/eval.py --- a/genshi/template/eval.py +++ b/genshi/template/eval.py @@ -310,6 +310,12 @@ visitUnaryAdd = visitUnarySub = visitNot = visitInvert = _visitUnaryOp visitBackquote = _visitUnaryOp + def visitIfExp(self, node): + node.test = self.visit(node.test) + node.then = self.visit(node.then) + node.else_ = self.visit(node.else_) + return node + # Identifiers, Literals and Comprehensions def _visitDefault(self, node): diff --git a/genshi/template/tests/eval.py b/genshi/template/tests/eval.py --- a/genshi/template/tests/eval.py +++ b/genshi/template/tests/eval.py @@ -278,6 +278,12 @@ expr = Expression("list(i['name'] for i in items if i['value'] > 1)") self.assertEqual(['b'], expr.evaluate({'items': items})) + if sys.version_info >= (2, 5): + def test_conditional_expression(self): + expr = Expression("'T' if foo else 'F'") + self.assertEqual('T', expr.evaluate({'foo': True})) + self.assertEqual('F', expr.evaluate({'foo': False})) + def test_slice(self): expr = Expression("numbers[0:2]") self.assertEqual([0, 1], expr.evaluate({'numbers': range(5)}))