From 1a0a437855de3cf2b47a98862e8a577971ffb0a4 Mon Sep 17 00:00:00 2001 From: Yannick Tivisse Date: Thu, 5 Sep 2019 14:05:30 +0000 Subject: [PATCH] [FIX] models.py: Don't commit after fetching a translation Purpose ======= When trying the translate a sql_contraint message after an integrity error we use the current cursor in a 'with', just to make a SELECT query. That way, the cursor is commited at the end of the with statement, trying to commit the inconsitent state of the cursor that was the reason of the integrity error. Just close the cursor, as we only fetch translations from the database. closes odoo/odoo#36458 Signed-off-by: Yannick Tivisse (yti) --- odoo/service/model.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/odoo/service/model.py b/odoo/service/model.py index 8f419e1c61d..9673b6f98c9 100644 --- a/odoo/service/model.py +++ b/odoo/service/model.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- +from contextlib import closing from functools import wraps import logging from psycopg2 import IntegrityError, OperationalError, errorcodes @@ -73,7 +74,7 @@ def check(f): # We open a *new* cursor here, one reason is that failed SQL # queries (as in IntegrityError) will invalidate the current one. - with odoo.sql_db.db_connect(dbname).cursor() as cr: + with closing(odoo.sql_db.db_connect(dbname).cursor()) as cr: if ttype == 'sql_constraint': res = translate_sql_constraint(cr, key=key, lang=lang) else: