From: Mike Bayer Date: Wed, 9 Feb 2011 15:58:16 +0000 (-0500) Subject: - Added an additional libpq message to the list of "disconnect" X-Git-Tag: rel_0_6_7~39 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1b3eb80b52773b8cc268d321379984a0572b7329;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - Added an additional libpq message to the list of "disconnect" exceptions, "could not receive data from server" [ticket:2044] --- diff --git a/CHANGES b/CHANGES index de02aedf11..25c6aa08cd 100644 --- a/CHANGES +++ b/CHANGES @@ -37,6 +37,10 @@ CHANGES than 63 characters using the same logic Postgresql uses. [ticket:1083] + - Added an additional libpq message to the list of "disconnect" + exceptions, "could not receive data from server" + [ticket:2044] + 0.6.6 ===== - orm diff --git a/lib/sqlalchemy/dialects/postgresql/psycopg2.py b/lib/sqlalchemy/dialects/postgresql/psycopg2.py index eb068bc56e..a0b356c62a 100644 --- a/lib/sqlalchemy/dialects/postgresql/psycopg2.py +++ b/lib/sqlalchemy/dialects/postgresql/psycopg2.py @@ -282,11 +282,19 @@ class PGDialect_psycopg2(PGDialect): def is_disconnect(self, e): if isinstance(e, self.dbapi.OperationalError): - return 'closed the connection' in str(e) or 'connection not open' in str(e) + # these error messages from libpq: interfaces/libpq/fe-misc.c. + # TODO: these are sent through gettext in libpq and we can't + # check within other locales - consider using connection.closed + return 'closed the connection' in str(e) or \ + 'connection not open' in str(e) or \ + 'could not receive data from server' in str(e) elif isinstance(e, self.dbapi.InterfaceError): - return 'connection already closed' in str(e) or 'cursor already closed' in str(e) + # psycopg2 client errors, psycopg2/conenction.h, psycopg2/cursor.h + return 'connection already closed' in str(e) or \ + 'cursor already closed' in str(e) elif isinstance(e, self.dbapi.ProgrammingError): - # yes, it really says "losed", not "closed" + # not sure where this path is originally from, it may + # be obsolete. It really says "losed", not "closed". return "losed the connection unexpectedly" in str(e) else: return False