summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>2020-11-17 22:45:52 +0000
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>2020-11-17 22:45:52 +0000
commite85ef2298b2ecee5d21c4580abd51611cef8329e (patch)
tree3e6fb104db838e9fed2f93c72ef8d3a90383c9f0
parent8449844af3cb8c93ce6493ef775db8296d529eed (diff)
parentcdca0a20e04853b3ea3e70524feef4c43992073e (diff)
downloadpsycopg2-e85ef2298b2ecee5d21c4580abd51611cef8329e.tar.gz
Merge branch 'connection_exception'
-rw-r--r--NEWS4
-rw-r--r--psycopg/error_type.c2
-rwxr-xr-xtests/test_errors.py7
3 files changed, 13 insertions, 0 deletions
diff --git a/NEWS b/NEWS
index 46a393d..5d26d71 100644
--- a/NEWS
+++ b/NEWS
@@ -5,6 +5,10 @@ What's new in psycopg 2.9
-------------------------
- 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
^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/psycopg/error_type.c b/psycopg/error_type.c
index 37b4d4a..60b2c48 100644
--- a/psycopg/error_type.c
+++ b/psycopg/error_type.c
@@ -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;
}
diff --git a/tests/test_errors.py b/tests/test_errors.py
index bd3e7fd..ec2950c 100755
--- a/tests/test_errors.py
+++ b/tests/test_errors.py
@@ -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):