def test_get_error(self): error = mock.MagicMock(spec=psycopg2.Error) pg_code = '08006' pg_error = 'error' diag = 'connection_failure' message = 'Connection failure' setattr(error, 'pgcode', pg_code) setattr(error, 'pgerror', pg_error) setattr(error, 'diag', diag) setattr(error, 'message', message) instance = registry.get_error(error) self.assertIsInstance(instance, PgClientError) self.assertEqual(instance.message, message) self.assertEqual(instance.pgcode, pg_code) self.assertTrue(instance.diag, diag) self.assertIn(instance.pgerror, pg_error)
def _connect(self, key=None): """Overridden connect method with reconnection features""" if not self.auto_reconnect: return super(ReliableThreadConnectionPool, self)._connect(key=key) conn = None while conn is None: try: conn = super(ReliableThreadConnectionPool, self)._connect(key=key) except psycopg2.DatabaseError as err: error = ErrorsRegistry.get_error(pg_error=err) logger.warning(str(error)) logger.info('Reconnecting') time.sleep(1) return conn
def _connect(self, key=None): """Overridden connect method with reconnection features""" if not self.auto_reconnect: return super(ReliableThreadConnectionPool, self)._connect(key=key) conn = None while conn is None: try: conn = super(ReliableThreadConnectionPool, self)._connect( key=key) except psycopg2.DatabaseError as err: error = ErrorsRegistry.get_error(pg_error=err) logger.warning(str(error)) logger.info('Reconnecting') time.sleep(1) return conn
def _get_cursor_ctx(self, cursor_factory=None): """Get connection cursor context manager :param cursor_factory: pg_extras.* cursor factory class """ conn = self.acquire_conn() try: yield conn.cursor( cursor_factory=cursor_factory or self._cursor_factory) conn.commit() except psycopg2.DatabaseError as err: try: conn.rollback() except psycopg2.Error: # connection already closed on rollback pass raise ErrorsRegistry.get_error(pg_error=err) finally: self.release_conn(conn)
def test_get_error_class_with_none_code(self): pg_code = None cls = registry.get_error_class(pg_code) self.assertEqual(cls, PgClientError)
def test_get_error_class(self): pg_code = '42P01' cls = registry.get_error_class(pg_code) self.assertTrue(issubclass(cls, PgClientError)) self.assertEqual(cls.CLASS_CODE, '42')