]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
refactor: make PGcancelConn.error_message return bytes
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Mon, 10 Jun 2024 15:42:17 +0000 (17:42 +0200)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Thu, 13 Jun 2024 14:04:25 +0000 (16:04 +0200)
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

psycopg/psycopg/generators.py
psycopg/psycopg/pq/abc.py
psycopg/psycopg/pq/pq_ctypes.py
psycopg_c/psycopg_c/_psycopg/generators.pyx
psycopg_c/psycopg_c/pq/pgcancel.pyx

index d56c2271a5055883ef911c5370ff5669f575c183..caafde0da20d16194197ba7a05890904d583bae8 100644 (file)
@@ -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}")
 
index cd3fdbf5d0d4da49f1d2d9f5f0af486a9c25e052..ed0acb4085e7c19e8e55fdf8548fefa530a1e795 100644 (file)
@@ -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: ...
 
index 33c3d7e3adbfb1b1bb8a553d8f92a1fc189af3cd..da4f026a7864ab0fbbd794f207d1b253dacd2dcf 100644 (file)
@@ -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()
index 0c8d72e0e4d5cf392b6b476ed422306502206aeb..88c5dc5ad0e18ae1c7e799f3e317278927db8e59 100644 (file)
@@ -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}")
 
index ab64763fa11cfdd2a4ec7482ea6c8ea12580c4db..4c461b13e49fb2690f70cdef46125224d3a77b90 100644 (file)
@@ -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()