)
def poll(self) -> int:
+ self._ensure_pgcancelconn()
return impl.PQcancelPoll(self.pgcancelconn_ptr)
@property
return impl.PQcancelErrorMessage(self.pgcancelconn_ptr).decode()
def reset(self) -> None:
+ self._ensure_pgcancelconn()
impl.PQcancelReset(self.pgcancelconn_ptr)
def finish(self) -> None:
if p:
PQcancelFinish(p)
+ def _ensure_pgcancelconn(self) -> None:
+ if not self.pgcancelconn_ptr:
+ raise e.OperationalError("the cancel connection is closed")
+
class PGcancel:
"""
)
def poll(self) -> int:
+ self._ensure_pgcancelconn()
return libpq.PQcancelPoll(self.pgcancelconn_ptr)
@property
return libpq.PQcancelErrorMessage(self.pgcancelconn_ptr).decode()
def reset(self) -> None:
+ self._ensure_pgcancelconn()
libpq.PQcancelReset(self.pgcancelconn_ptr)
def finish(self) -> None:
libpq.PQcancelFinish(self.pgcancelconn_ptr)
self.pgcancelconn_ptr = NULL
+ def _ensure_pgcancelconn(self) -> None:
+ if self.pgcancelconn_ptr is NULL:
+ raise e.OperationalError("the cancel connection is closed")
+
cdef class PGcancel:
def __cinit__(self):
assert cancel_conn.status == pq.ConnStatus.OK
+@pytest.mark.libpq(">= 17")
+def test_cancel_conn_finished(pgconn):
+ cancel_conn = pgconn.cancel_conn()
+ cancel_conn.reset()
+ cancel_conn.finish()
+ with pytest.raises(psycopg.OperationalError):
+ cancel_conn.start()
+ with pytest.raises(psycopg.OperationalError):
+ cancel_conn.blocking()
+ with pytest.raises(psycopg.OperationalError):
+ cancel_conn.poll()
+ with pytest.raises(psycopg.OperationalError):
+ cancel_conn.reset()
+ assert cancel_conn.error_message.strip() == "connection pointer is NULL"
+
+
def test_cancel(pgconn):
cancel = pgconn.get_cancel()
cancel.cancel()