示例#1
0
    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)
示例#2
0
    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
示例#3
0
    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)
示例#4
0
    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
示例#5
0
    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)
示例#6
0
    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)
示例#7
0
 def test_get_error_class_with_none_code(self):
     pg_code = None
     cls = registry.get_error_class(pg_code)
     self.assertEqual(cls, PgClientError)
示例#8
0
 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')
示例#9
0
 def test_get_error_class_with_none_code(self):
     pg_code = None
     cls = registry.get_error_class(pg_code)
     self.assertEqual(cls, PgClientError)
示例#10
0
 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')