Skip to content

Commit

Permalink
Meaningful connection errors report a meaningful message
Browse files Browse the repository at this point in the history
Fixes issue psycopg#173.
  • Loading branch information
dvarrazzo committed Oct 16, 2013
1 parent 0e08fbb commit 09cf64d
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 1 deletion.
2 changes: 2 additions & 0 deletions NEWS
Expand Up @@ -6,6 +6,8 @@ What's new in psycopg 2.5.2

- Fixed segfault pickling the exception raised on connection error
(:ticket:`#170`).
- Meaningful connection errors report a meaningful message, thanks to
Alexey Borzenkov (:ticket:`#173`).


What's new in psycopg 2.5.1
Expand Down
7 changes: 6 additions & 1 deletion psycopg/connection_int.c
Expand Up @@ -642,6 +642,7 @@ static int
_conn_poll_connecting(connectionObject *self)
{
int res = PSYCO_POLL_ERROR;
const char *msg;

Dprintf("conn_poll: poll connecting");
switch (PQconnectPoll(self->pgconn)) {
Expand All @@ -656,7 +657,11 @@ _conn_poll_connecting(connectionObject *self)
break;
case PGRES_POLLING_FAILED:
case PGRES_POLLING_ACTIVE:
PyErr_SetString(OperationalError, "asynchronous connection failed");
msg = PQerrorMessage(self->pgconn);
if (!(msg && *msg)) {
msg = "asynchronous connection failed";
}
PyErr_SetString(OperationalError, msg);
res = PSYCO_POLL_ERROR;
break;
}
Expand Down
10 changes: 10 additions & 0 deletions tests/test_async.py
Expand Up @@ -449,6 +449,16 @@ def test_async_cursor_gone(self):
self.wait(self.conn)
self.assertEqual(cur.fetchone(), (42,))

def test_async_connection_error_message(self):
try:
cnn = psycopg2.connect('dbname=thisdatabasedoesntexist', async=True)
self.wait(cnn)
except psycopg2.Error, e:
self.assertNotEqual(str(e), "asynchronous connection failed",
"connection error reason lost")
else:
self.fail("no exception raised")


def test_suite():
return unittest.TestLoader().loadTestsFromName(__name__)
Expand Down

0 comments on commit 09cf64d

Please sign in to comment.