changeset 61b229b66896 in trytond:default
details: https://hg.tryton.org/trytond?cmd=changeset&node=61b229b66896
description:
Allow PYSON Expression as key for PYSON In with dict object
issue10542
diffstat:
CHANGELOG | 1 +
trytond/pyson.py | 10 ++++++++--
trytond/tests/test_pyson.py | 8 ++++++++
3 files changed, 17 insertions(+), 2 deletions(-)
diffs (55 lines):
diff -r 70b728cf0449 -r 61b229b66896 CHANGELOG
--- a/CHANGELOG Wed Jul 07 00:44:40 2021 +0200
+++ b/CHANGELOG Sun Jul 11 11:25:30 2021 +0200
@@ -1,3 +1,4 @@
+* Allow PYSON Expression as key for PYSON In with dict object
* Add method to format warning name with records
* Add option to trytond-console to start a readonly transaction
* Add support for werkzeug 2.0
diff -r 70b728cf0449 -r 61b229b66896 trytond/pyson.py
--- a/trytond/pyson.py Wed Jul 07 00:44:40 2021 +0200
+++ b/trytond/pyson.py Sun Jul 11 11:25:30 2021 +0200
@@ -485,11 +485,17 @@
assert obj.types().issubset({dict, list}), \
'obj must be a dict or a list'
if obj.types() == {dict}:
- assert isinstance(key, str), 'key must be a string'
+ if isinstance(key, PYSON):
+ assert key.types() == {str}, 'key must be a string'
+ else:
+ assert isinstance(key, str), 'key must be a string'
else:
assert isinstance(obj, (dict, list))
if isinstance(obj, dict):
- assert isinstance(key, str), 'key must be a string'
+ if isinstance(key, PYSON):
+ assert key.types() == {str}, 'key must be a string'
+ else:
+ assert isinstance(key, str), 'key must be a string'
self._key = key
self._obj = obj
diff -r 70b728cf0449 -r 61b229b66896 trytond/tests/test_pyson.py
--- a/trytond/tests/test_pyson.py Wed Jul 07 00:44:40 2021 +0200
+++ b/trytond/tests/test_pyson.py Sun Jul 11 11:25:30 2021 +0200
@@ -461,12 +461,20 @@
eval = pyson.PYSONEncoder().encode(pyson.In('foo', {'foo': 'bar'}))
self.assertTrue(pyson.PYSONDecoder().decode(eval))
+ eval = pyson.PYSONEncoder().encode(pyson.In(
+ pyson.Eval('test', 'foo'), {'foo': 'bar'}))
+ self.assertTrue(pyson.PYSONDecoder().decode(eval))
+
eval = pyson.PYSONEncoder().encode(pyson.In('1', {1: 'bar'}))
self.assertTrue(pyson.PYSONDecoder().decode(eval))
eval = pyson.PYSONEncoder().encode(pyson.In('test', {'foo': 'bar'}))
self.assertFalse(pyson.PYSONDecoder().decode(eval))
+ eval = pyson.PYSONEncoder().encode(pyson.In(
+ pyson.Eval('foo', 'test'), {'foo': 'bar'}))
+ self.assertFalse(pyson.PYSONDecoder().decode(eval))
+
eval = pyson.PYSONEncoder().encode(pyson.In('1', {2: 'bar'}))
self.assertFalse(pyson.PYSONDecoder().decode(eval))