From f0d1bcd816ec4d1c457379eebdefa43ff5cb990d Mon Sep 17 00:00:00 2001 From: "Andrea Grazioso (agr-odoo)" Date: Wed, 23 Nov 2022 14:15:17 +0000 Subject: [PATCH] [FIX] account, account_sequence: psycopg2 errors class missing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Traceback when starting odoo server ImportError: cannot import name 'errors' from 'psycopg2' Exception management update in commit 4b430f8e30efb15f06982e4673cd73531a2119b3 would require psycopg2 version 2.8 minimum but version in requirements is 2.7.7 closes odoo/odoo#106369 X-original-commit: b21fdf115e855d2383603e67343012bfe346cfd9 Signed-off-by: William André (wan) --- addons/account/models/partner.py | 8 ++++++-- addons/account/tests/test_sequence_mixin.py | 2 +- addons/account_sequence/models/sequence_mixin.py | 9 ++++++--- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/addons/account/models/partner.py b/addons/account/models/partner.py index 51387f43a84..724709514dc 100644 --- a/addons/account/models/partner.py +++ b/addons/account/models/partner.py @@ -4,7 +4,7 @@ import time import logging -from psycopg2 import sql, errors as sql_errors +from psycopg2 import sql, DatabaseError from odoo import api, fields, models, _ from odoo.osv import expression @@ -649,7 +649,11 @@ class ResPartner(models.Model): """).format(field=sql.Identifier(field)) self.env.cr.execute(query, {'partner_ids': tuple(self.ids), 'n': n}) self.invalidate_recordset([field]) - except (sql_errors.SerializationFailure, sql_errors.LockNotAvailable): + except DatabaseError as e: + # 55P03 LockNotAvailable + # 40001 SerializationFailure + if e.pgcode not in ('55P03', '40001'): + raise e _logger.debug('Another transaction already locked partner rows. Cannot update partner ranks.') @api.model diff --git a/addons/account/tests/test_sequence_mixin.py b/addons/account/tests/test_sequence_mixin.py index cbcf30b1235..5319657343c 100644 --- a/addons/account/tests/test_sequence_mixin.py +++ b/addons/account/tests/test_sequence_mixin.py @@ -280,7 +280,7 @@ class TestSequenceMixin(TestSequenceMixinCommon): self.assertEqual(copies[5].name, 'XMISC/2019/00004') # Can't have twice the same name - with self.assertRaises(psycopg2.errors.IntegrityError), mute_logger('odoo.sql_db'), self.env.cr.savepoint(): + with self.assertRaises(psycopg2.DatabaseError), mute_logger('odoo.sql_db'), self.env.cr.savepoint(): copies[0].name = 'XMISC/2019/00001' # Lets remove the order by date diff --git a/addons/account_sequence/models/sequence_mixin.py b/addons/account_sequence/models/sequence_mixin.py index 0b53ecbddcc..bb6a25ab99e 100644 --- a/addons/account_sequence/models/sequence_mixin.py +++ b/addons/account_sequence/models/sequence_mixin.py @@ -1,4 +1,4 @@ -from psycopg2 import errors +from psycopg2 import DatabaseError from odoo import models from odoo.tools import mute_logger @@ -36,7 +36,10 @@ class SequenceMixin(models.AbstractModel): self[self._sequence_field] = sequence self.flush_recordset([self._sequence_field]) break - except (errors.ExclusionViolation, errors.UniqueViolation): - pass + except DatabaseError as e: + # 23P01 ExclusionViolation + # 23505 UniqueViolation + if e.pgcode not in ('23P01', '23505'): + raise e self._compute_split_sequence() self.flush_recordset(['sequence_prefix', 'sequence_number'])