[FIX] core: translate SQL constraints

To reproduce the issue:
1. Install `mrp`
2. Send a RPC to create a new BoM:
   - `{"product_tmpl_id": 1, "product_qty": -1}`

Error: It will generate a traceback

Because of the negative product qty, the RPC triggers a SQL constraint
that we try to return. However, the context does not have any `lang`,
hence the traceback

sentry-4088426130

closes odoo/odoo#120614

X-original-commit: badc554b9dd7a299aac8ebca24bec6b90bef779a
Signed-off-by: Julien Castiaux (juc) <juc@odoo.com>
Signed-off-by: Rémy Voet <ryv@odoo.com>
This commit is contained in:
Adrien Widart (awt)
2023-05-09 11:57:14 +02:00
parent ac07e4a497
commit 28075c915b
3 changed files with 12 additions and 1 deletions
+5
View File
@@ -18,3 +18,8 @@ class ModelB(models.Model):
_description = "Model B"
name = fields.Char(required=True)
value = fields.Integer()
_sql_constraints = [
('qty_positive', 'check (value > 0)', 'The value must be positive'),
]
+6
View File
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
from functools import partial
from xmlrpc.client import Fault
from odoo.tests import common, tagged
from odoo.tools.misc import mute_logger
@@ -65,3 +66,8 @@ class TestError(common.HttpCase):
)
self.assertIn("Model: Model A (test_rpc.model_a)", e.faultString)
self.assertIn("Constraint: test_rpc_model_a_field_b2_fkey", e.faultString)
def test_03_sql_constraint(self):
with mute_logger("odoo.sql_db"):
with self.assertRaisesRegex(Fault, r'The operation cannot be completed: The value must be positive'):
self.rpc("test_rpc.model_b", "create", {"name": "B1", "value": -1})
+1 -1
View File
@@ -109,7 +109,7 @@ def _as_validation_error(env, exc):
if exc.diag.constraint_name in env.registry._sql_constraints:
return ValidationError(_(
"The operation cannot be completed: %s",
translate_sql_constraint(env.cr, exc.diag.constraint_name, env.context['lang'])
translate_sql_constraint(env.cr, exc.diag.constraint_name, env.context.get('lang', 'en_US'))
))
return ValidationError(_("The operation cannot be completed: %s", exc.args[0]))