From: Daniele Varrazzo Date: Mon, 10 Jun 2024 15:42:17 +0000 (+0200) Subject: refactor: make PGcancelConn.error_message return bytes X-Git-Tag: 3.2.0~15^2~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d1afc0be559b2ce30da6930bc3541a91b0786d13;p=thirdparty%2Fpsycopg.git refactor: make PGcancelConn.error_message return bytes This is more consistent with PGconn and PGresult. There doesn't seem to be the need of extending pq.misc.error_message as we never pass it a PGcancelConn object. Close #781 --- diff --git a/psycopg/psycopg/generators.py b/psycopg/psycopg/generators.py index d56c2271a..caafde0da 100644 --- a/psycopg/psycopg/generators.py +++ b/psycopg/psycopg/generators.py @@ -114,9 +114,8 @@ def _cancel(cancel_conn: PGcancelConn, *, timeout: float = 0.0) -> PQGenConn[Non elif status == POLL_WRITING: yield cancel_conn.socket, WAIT_W elif status == POLL_FAILED: - raise e.OperationalError( - f"cancellation failed: {cancel_conn.error_message}" - ) + msg = cancel_conn.error_message.decode("utf8", "replace") + raise e.OperationalError(f"cancellation failed: {msg}") else: raise e.InternalError(f"unexpected poll status: {status}") diff --git a/psycopg/psycopg/pq/abc.py b/psycopg/psycopg/pq/abc.py index cd3fdbf5d..ed0acb408 100644 --- a/psycopg/psycopg/pq/abc.py +++ b/psycopg/psycopg/pq/abc.py @@ -288,7 +288,7 @@ class PGcancelConn(Protocol): def socket(self) -> int: ... @property - def error_message(self) -> str: ... + def error_message(self) -> bytes: ... def reset(self) -> None: ... diff --git a/psycopg/psycopg/pq/pq_ctypes.py b/psycopg/psycopg/pq/pq_ctypes.py index 33c3d7e3a..da4f026a7 100644 --- a/psycopg/psycopg/pq/pq_ctypes.py +++ b/psycopg/psycopg/pq/pq_ctypes.py @@ -946,9 +946,8 @@ class PGcancelConn: See :pq:`PQcancelStart` for details. """ if not impl.PQcancelStart(self.pgcancelconn_ptr): - raise e.OperationalError( - f"couldn't start cancellation: {self.error_message}" - ) + msg = self.error_message.decode("utf8", "replace") + raise e.OperationalError(f"couldn't start cancellation: {msg}") def blocking(self) -> None: """Requests that the server abandons processing of the current command @@ -957,9 +956,8 @@ class PGcancelConn: See :pq:`PQcancelBlocking` for details. """ if not impl.PQcancelBlocking(self.pgcancelconn_ptr): - raise e.OperationalError( - f"couldn't start cancellation: {self.error_message}" - ) + msg = self.error_message.decode("utf8", "replace") + raise e.OperationalError(f"couldn't start cancellation: {msg}") def poll(self) -> int: self._ensure_pgcancelconn() @@ -977,8 +975,8 @@ class PGcancelConn: return rv @property - def error_message(self) -> str: - return impl.PQcancelErrorMessage(self.pgcancelconn_ptr).decode() + def error_message(self) -> bytes: + return impl.PQcancelErrorMessage(self.pgcancelconn_ptr) def reset(self) -> None: self._ensure_pgcancelconn() diff --git a/psycopg_c/psycopg_c/_psycopg/generators.pyx b/psycopg_c/psycopg_c/_psycopg/generators.pyx index 0c8d72e0e..88c5dc5ad 100644 --- a/psycopg_c/psycopg_c/_psycopg/generators.pyx +++ b/psycopg_c/psycopg_c/_psycopg/generators.pyx @@ -100,9 +100,8 @@ def cancel(pq.PGcancelConn cancel_conn, *, timeout: float = 0.0) -> PQGenConn[No elif status == libpq.PGRES_POLLING_WRITING: yield libpq.PQcancelSocket(pgcancelconn_ptr), WAIT_W elif status == libpq.PGRES_POLLING_FAILED: - raise e.OperationalError( - f"cancellation failed: {cancel_conn.error_message}" - ) + msg = cancel_conn.error_message.decode("utf8", "replace") + raise e.OperationalError(f"cancellation failed: {msg}") else: raise e.InternalError(f"unexpected poll status: {status}") diff --git a/psycopg_c/psycopg_c/pq/pgcancel.pyx b/psycopg_c/psycopg_c/pq/pgcancel.pyx index ab64763fa..4c461b13e 100644 --- a/psycopg_c/psycopg_c/pq/pgcancel.pyx +++ b/psycopg_c/psycopg_c/pq/pgcancel.pyx @@ -56,8 +56,8 @@ cdef class PGcancelConn: return rv @property - def error_message(self) -> str: - return libpq.PQcancelErrorMessage(self.pgcancelconn_ptr).decode() + def error_message(self) -> bytes: + return libpq.PQcancelErrorMessage(self.pgcancelconn_ptr) def reset(self) -> None: self._ensure_pgcancelconn()