From cec6e163c156401aed3264c0dcf76ea47def0776 Mon Sep 17 00:00:00 2001 From: Alvaro Fuentes Date: Tue, 7 Feb 2023 08:46:53 +0000 Subject: [PATCH] [FIX] base: don't fail on empty groups attribute In 15.0 this was supported. It may be also handy when editing views to momentarily set the groups to `""`. Steps to reproduce: 1. Install Odoo 15 locally 2. Edit or create a view with `groups=""` for some component 3. Upgrade to 16. It fails. Empty groups was allowed in 15.0 we want to ensure this is not broken unintentionally anymore, such a new test was added. Muted logged to hide the warning (also present in 15.0): ``` 2023-02-08 11:09:18,697 506777 WARNING test_16_gr odoo.addons.base.models.ir_ui_view: The group '' defined in view does not exist! View error context: {'file': None, 'line': 3, 'name': 'foo', 'view': ir.ui.view(242,), 'view.model': 'res.partner', 'view.parent': ir.ui.view(), 'xmlid': ''} ``` closes odoo/odoo#112246 X-original-commit: 4379dce95edcc34a8e97e73a3bdaa2e20fdc79a8 Signed-off-by: Denis Ledoux (dle) --- odoo/addons/base/models/ir_ui_view.py | 3 ++- odoo/addons/base/tests/test_views.py | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/odoo/addons/base/models/ir_ui_view.py b/odoo/addons/base/models/ir_ui_view.py index 514bd2ebc9a..2cd347e2bf4 100644 --- a/odoo/addons/base/models/ir_ui_view.py +++ b/odoo/addons/base/models/ir_ui_view.py @@ -1061,7 +1061,8 @@ actual arch. """ for node in tree.xpath('//*[@groups]'): - if not self.user_has_groups(node.attrib.pop('groups')): + attrib_groups = node.attrib.pop('groups') + if attrib_groups and not self.user_has_groups(attrib_groups): node.getparent().remove(node) elif node.tag == 't' and (not node.attrib or node.get('postprocess_added')): # Move content of blocks diff --git a/odoo/addons/base/tests/test_views.py b/odoo/addons/base/tests/test_views.py index da21a75d569..b46b7a93b5d 100644 --- a/odoo/addons/base/tests/test_views.py +++ b/odoo/addons/base/tests/test_views.py @@ -2969,6 +2969,23 @@ class TestViews(ViewCase): """, valid=True) + @mute_logger('odoo.addons.base.models.ir_ui_view') + def test_empty_groups_attrib(self): + """Ensure we allow empty groups attribute""" + view = self.View.create({ + 'name': 'foo', + 'model': 'res.partner', + 'arch': """ +
+ + + """, + }) + arch = self.env['res.partner'].get_view(view_id=view.id)['arch'] + tree = etree.fromstring(arch) + nodes = tree.xpath("//field[@name='name' and not (@groups)]") + self.assertEqual(1, len(nodes)) + def test_attrs_groups_with_groups_in_model(self): """Tests the attrs is well processed to modifiers for a field node combining: - a `groups` attribute on the field node in the view architecture