Classify connection exceptions as operational errors to better conform with PEP 249

This commit is contained in:
Justas Sadzevicius 2020-09-07 09:44:44 +03:00
parent 8764a85320
commit cdca0a20e0
3 changed files with 18 additions and 0 deletions

9
NEWS
View File

@ -1,6 +1,15 @@
Current release
---------------
What's new in psycopg 2.9.0
^^^^^^^^^^^^^^^^^^^^^^^^^^^
- Reclassified SQLSTATE connection exceptions (08XXX) as
`~psycopg2.errors.OperationalError`, conforming better to
PEP 249. This error is a subclass of previously used
`~psycopg2.errors.DatabaseError`.
What's new in psycopg 2.8.6
^^^^^^^^^^^^^^^^^^^^^^^^^^^

View File

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

View File

@ -62,6 +62,13 @@ class ErrorsTests(ConnectingTestCase):
with self.assertRaises(KeyError):
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):
excs = []
for n in dir(psycopg2):