[FIX] base: standardize modifiers received by the JS Framework

Before this commit, the JS Framework receives different types of modifiers:

- List: used for domains.
- String: used for the dynamic domains and boolean values ('1' or '0');
- Integer: used for boolean values (1 or 0);
- Boolean: used for boolean values (True or False);

The issue with this, is that the JS Framework needed to manage the 3
different possibles ways to have a boolean modifier (1, '1', True).

Now, only three types are sent to the JS Framework:

- List: used for domains.
- String: used for the dynamic domains and boolean values ('1' or '0');
- Boolean: used for boolean values (True or False).

The boolean usually sent in a Number (1 or 0) will be transformed into
proper Boolean types (True or False).\

Note that, the 'falsy' modifiers are not sent to the JS Framework.

closes odoo/odoo#108095

X-original-commit: faddb53f30b94ac47ffd7b3b1af36f094f3a60f6
Signed-off-by: Julien Castiaux <juc@odoo.com>
Signed-off-by: Jorge Pinna Puissant (jpp) <jpp@odoo.com>
This commit is contained in:
Jorge Pinna Puissant
2022-12-15 21:18:49 +01:00
parent 8e3de77042
commit 016864ce6b
2 changed files with 12 additions and 1 deletions
+3
View File
@@ -84,6 +84,9 @@ def transfer_node_to_modifiers(node, modifiers):
attrs = node.attrib.pop('attrs', None)
if attrs:
modifiers.update(ast.literal_eval(attrs.strip()))
for a in ('invisible', 'readonly', 'required'):
if a in modifiers and isinstance(modifiers[a], int):
modifiers[a] = bool(modifiers[a])
states = node.attrib.pop('states', None)
if states:
+9 -1
View File
@@ -1792,7 +1792,7 @@ class TestViews(ViewCase):
node = etree.fromstring(what) if isinstance(what, str) else what
transfer_node_to_modifiers(node, modifiers)
simplify_modifiers(modifiers)
assert modifiers == expected, "%s != %s" % (modifiers, expected)
assert str(modifiers) == str(expected), "%s != %s" % (modifiers, expected)
_test_modifiers('<field name="a"/>', {})
_test_modifiers('<field name="a" invisible="1"/>', {"invisible": True})
@@ -1801,6 +1801,14 @@ class TestViews(ViewCase):
_test_modifiers('<field name="a" invisible="0"/>', {})
_test_modifiers('<field name="a" readonly="0"/>', {})
_test_modifiers('<field name="a" required="0"/>', {})
_test_modifiers(
"""<field name="a" attrs="{'readonly': 1}"/>""",
{"readonly": True},
)
_test_modifiers(
"""<field name="a" attrs="{'readonly': 0}"/>""",
{},
)
# TODO: Order is not guaranteed
_test_modifiers(
'<field name="a" invisible="1" required="1"/>',