Merge branch 'connection_exception'

This commit is contained in:
Daniele Varrazzo 2020-11-17 22:45:52 +00:00
commit e85ef2298b
3 changed files with 13 additions and 0 deletions

4
NEWS
View File

@ -5,6 +5,10 @@ What's new in psycopg 2.9
------------------------- -------------------------
- Dropped support for Python 3.4, 3.5 (:tickets:#1000, #1197). - Dropped support for Python 3.4, 3.5 (:tickets:#1000, #1197).
- Reclassified SQLSTATE connection exceptions (08XXX) as
`~psycopg2.errors.OperationalError` (subclass of previously used
`~psycopg2.errors.DatabaseError`) (:ticket:`#1148`).
What's new in psycopg 2.8.6 What's new in psycopg 2.8.6
^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^

View File

@ -65,6 +65,8 @@ base_exception_from_sqlstate(const char *sqlstate)
switch (sqlstate[0]) { switch (sqlstate[0]) {
case '0': case '0':
switch (sqlstate[1]) { switch (sqlstate[1]) {
case '8': /* Class 08 - Connection Exception */
return OperationalError;
case 'A': /* Class 0A - Feature Not Supported */ case 'A': /* Class 0A - Feature Not Supported */
return NotSupportedError; return NotSupportedError;
} }

View File

@ -62,6 +62,13 @@ class ErrorsTests(ConnectingTestCase):
with self.assertRaises(KeyError): with self.assertRaises(KeyError):
errors.lookup('XXXXX') errors.lookup('XXXXX')
def test_connection_exceptions_backwards_compatibility(self):
err = errors.lookup('08000')
# connection exceptions are classified as operational errors
self.assert_(issubclass(err, errors.OperationalError))
# previously these errors were classified only as DatabaseError
self.assert_(issubclass(err, errors.DatabaseError))
def test_has_base_exceptions(self): def test_has_base_exceptions(self):
excs = [] excs = []
for n in dir(psycopg2): for n in dir(psycopg2):