[FIX] account, account_sequence: psycopg2 errors class missing

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) <wan@odoo.com>
This commit is contained in:
Andrea Grazioso (agr-odoo)
2022-11-23 21:56:09 +01:00
parent 97c1fbc18b
commit f0d1bcd816
3 changed files with 13 additions and 6 deletions
+6 -2
View File
@@ -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
+1 -1
View File
@@ -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
@@ -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'])