Ticket #15802: 15802.diff

File 15802.diff, 1.6 KB (added by Honza Král, 14 years ago)

hack stolen from sqlalchemy

  • django/db/backends/postgresql_psycopg2/base.py

    diff --git a/django/db/backends/postgresql_psycopg2/base.py b/django/db/backends/postgresql_psycopg2/base.py
    index 67e2877..e1a3a53 100644
    a b class DatabaseWrapper(BaseDatabaseWrapper):  
    193193                return self.connection.commit()
    194194            except Database.IntegrityError, e:
    195195                raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
     196
     197    def close(self):
     198        if self.connection is None:
     199            return
     200
     201        try:
     202            self.connection.close()
     203            self.connection = None
     204
     205        # in some cases psycopg2 can throw an exception on closing, some of
     206        # these exceptions indicate that the connection has been closed, try to
     207        # recognize those and mark the connection as closed.
     208        # Taken from http://www.sqlalchemy.org/trac/browser/lib/sqlalchemy/dialects/postgresql/psycopg2.py
     209        except psycopg2.OperationalError, e:
     210            if 'closed the connection' in str(e) or 'connection not open' in str(e) or 'could not receive data from server' in str(e):
     211                self.connection = None
     212            else:
     213                raise
     214        except psycopg2.InterfaceError, e:
     215            if 'connection already closed' in str(e) or 'cursor already closed' in str(e):
     216                self.connection = None
     217            else:
     218                raise
     219        except psycopg2.ProgrammingError, e:
     220            if "losed the connection unexpectedly" in str(e):
     221                self.connection = None
     222            else:
     223                raise
Back to Top