changeset f1867aedd143 in trytond:default
details: https://hg.tryton.org/trytond?cmd=changeset&node=f1867aedd143
description:
Remove same types restriction on PYSON If
issue11644
review419661003
diffstat:
CHANGELOG | 1 +
trytond/pyson.py | 19 +++++++------------
trytond/tests/test_pyson.py | 5 ++---
3 files changed, 10 insertions(+), 15 deletions(-)
diffs (63 lines):
diff -r 6ef3220ac4e0 -r f1867aedd143 CHANGELOG
--- a/CHANGELOG Thu Sep 08 13:15:54 2022 +0200
+++ b/CHANGELOG Thu Sep 08 13:17:54 2022 +0200
@@ -1,3 +1,4 @@
+* Remove same types restriction on PYSON If
* Allow PYSON size of fields to be None
* Add command line completion with argcomplete
* Include record name and value in validation error message
diff -r 6ef3220ac4e0 -r f1867aedd143 trytond/pyson.py
--- a/trytond/pyson.py Thu Sep 08 13:15:54 2022 +0200
+++ b/trytond/pyson.py Thu Sep 08 13:17:54 2022 +0200
@@ -400,16 +400,6 @@
condition = Bool(condition)
elif not isinstance(condition, bool):
condition = bool(condition)
- if isinstance(then_statement, PYSON):
- then_types = then_statement.types()
- else:
- then_types = {type(then_statement)}
- if isinstance(else_statement, PYSON):
- else_types = else_statement.types()
- else:
- else_types = {type(else_statement)}
- assert then_types == else_types, \
- 'then and else statements must be the same type'
self._condition = condition
self._then_statement = then_statement
self._else_statement = else_statement
@@ -428,9 +418,14 @@
def types(self):
if isinstance(self._then_statement, PYSON):
- return self._then_statement.types()
+ types = self._then_statement.types()
else:
- return {type(self._then_statement)}
+ types = {type(self._then_statement)}
+ if isinstance(self._else_statement, PYSON):
+ types |= self._else_statement.types()
+ else:
+ types |= {type(self._else_statement)}
+ return types
@staticmethod
def eval(dct, context):
diff -r 6ef3220ac4e0 -r f1867aedd143 trytond/tests/test_pyson.py
--- a/trytond/tests/test_pyson.py Thu Sep 08 13:15:54 2022 +0200
+++ b/trytond/tests/test_pyson.py Thu Sep 08 13:17:54 2022 +0200
@@ -395,12 +395,11 @@
'e': 'bar',
})
- if not sys.flags.optimize:
- self.assertRaises(AssertionError, pyson.If, True, 'foo', False)
-
self.assertEqual(pyson.If(True, 'foo', 'bar').types(),
set([str]))
self.assertEqual(pyson.If(True, False, True).types(), set([bool]))
+ self.assertEqual(
+ pyson.If(True, 'foo', False).types(), set([bool, str]))
eval = pyson.PYSONEncoder().encode(pyson.If(True, 'foo', 'bar'))
self.assertEqual(pyson.PYSONDecoder().decode(eval), 'foo')