[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:
@@ -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:
|
||||
|
||||
@@ -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"/>',
|
||||
|
||||
Reference in New Issue
Block a user