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))
 

Reply via email to