diff --git a/trytond/pyson.py b/trytond/pyson.py index 34e0f61563..45ceee1e16 100644 --- a/trytond/pyson.py +++ b/trytond/pyson.py @@ -154,7 +154,7 @@ class Eval(PYSON): @staticmethod def eval(dct, context): - if '.' in dct['v']: + if '.' in dct['v'] and dct['v'] not in context: base, name = dct['v'].split('.', 1) return Eval.eval({ 'v': name, diff --git a/trytond/tests/test_pyson.py b/trytond/tests/test_pyson.py index cc608a32d5..dec0ca38dc 100644 --- a/trytond/tests/test_pyson.py +++ b/trytond/tests/test_pyson.py @@ -846,6 +846,19 @@ class PYSONTestCase(unittest.TestCase): ]: self.assertEqual(pyson.PYSONDecoder(ctx).decode(eval), result) + def test_Eval_dot_notation_in_context(self): + "Test pyson.Eval with dot notation in context" + + eval = pyson.PYSONEncoder().encode(pyson.Eval('foo.bar', 0)) + ctx = { + 'foo.bar': 1, + 'foo': { + 'bar': 0, + }, + } + + self.assertEqual(pyson.PYSONDecoder(ctx).decode(eval), 1) + def test_eval_true(self): "Test PYSON.eval JS true" self.assertEqual(eval('true', pyson.CONTEXT), True)