From c2440fa562d7c425e0b87b8f26199b397b9d2dac Mon Sep 17 00:00:00 2001 From: sabr Date: Wed, 6 Dec 2023 15:01:00 +0530 Subject: [PATCH] [FIX] base: prevent traceback while invalid context pass MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This issue occurs when a customer passes an invalid context in the view, at that time this error will be generated. Steps To Produce:- - Go to `Settings >Technical >User Interface >Views` - Open any view - pass invalid context like `context="{'search_default_demo': active_id}, 'search_default_x_stage_id':[3]}"` -error will be generated error-SyntaxError unmatched '}' (, line 1) after this commit, we can display Validation Errors to users instead of a traceback when they make mistakes in any UI view. sentry-4684090820 closes odoo/odoo#145193 Signed-off-by: Rémy Voet (ryv) --- odoo/addons/base/i18n/base.pot | 10 ++++++++++ odoo/addons/base/models/ir_ui_view.py | 6 +++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/odoo/addons/base/i18n/base.pot b/odoo/addons/base/i18n/base.pot index c03927e7515..081ecf149c0 100644 --- a/odoo/addons/base/i18n/base.pot +++ b/odoo/addons/base/i18n/base.pot @@ -18161,6 +18161,16 @@ msgstr "" msgid "Invalid composed field %(definition)s in %(use)s" msgstr "" +#. module: base +#. odoo-python +#: code:addons/base/models/ir_ui_view.py:0 +#, python-format +msgid "" +"Invalid context: %(expr)r is not a valid Python expression \n" +"\n" +" %(e)s" +msgstr "" + #. module: base #. odoo-python #: code:addons/base/models/ir_fields.py:0 diff --git a/odoo/addons/base/models/ir_ui_view.py b/odoo/addons/base/models/ir_ui_view.py index 9ee34896b3b..94cc8d5bbd9 100644 --- a/odoo/addons/base/models/ir_ui_view.py +++ b/odoo/addons/base/models/ir_ui_view.py @@ -1646,7 +1646,11 @@ actual arch. self._validate_classes(node, expr) elif attr == 'context': - vnames = get_expression_field_names(expr) - {'id'} + try: + vnames = get_expression_field_names(expr) - {'id'} + except SyntaxError as e: + message = _('Invalid context: %(expr)r is not a valid Python expression \n\n %(e)s', expr=expr, e=e) + self._raise_view_error(message) if vnames: name_manager.must_have_fields(node, vnames, f"context ({expr})") for key, val_ast in get_dict_asts(expr).items():