# HG changeset patch # User cmlenz # Date 1163090528 0 # Node ID b517929eb334a0f98a678300cc12aed0470ed2eb # Parent 7763f7aec949f1a2db369c4cfa7abf6936e59041 Make expressions hashable. diff --git a/genshi/template/eval.py b/genshi/template/eval.py --- a/genshi/template/eval.py +++ b/genshi/template/eval.py @@ -83,6 +83,15 @@ self.code = _compile(ast.Expression(source), filename=filename, lineno=lineno) + def __eq__(self, other): + return (type(other) == Expression) and (self.code == other.code) + + def __hash__(self): + return hash(self.code) + + def __ne__(self, other): + return not self == other + def __repr__(self): return 'Expression(%r)' % self.source 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 @@ -20,6 +20,16 @@ class ExpressionTestCase(unittest.TestCase): + def test_eq(self): + expr = Expression('x,y') + self.assertEqual(expr, Expression('x,y')) + self.assertNotEqual(expr, Expression('y, x')) + + def test_hash(self): + expr = Expression('x,y') + self.assertEqual(hash(expr), hash(Expression('x,y'))) + self.assertNotEqual(hash(expr), hash(Expression('y, x'))) + def test_name_lookup(self): self.assertEqual('bar', Expression('foo').evaluate({'foo': 'bar'})) self.assertEqual(id, Expression('id').evaluate({}, nocall=True))