def __repr__(self) -> str:
cls = f"{self.__class__.__module__}.{self.__class__.__qualname__}"
info = pq.misc.connection_summary(self._conn.pgconn)
- status = " (closed)" if self._closed else ""
- return f"<{cls}{status} {info} at 0x{id(self):x}>"
+ if self._closed:
+ status = "closed"
+ elif not self._pgresult:
+ status = "no result"
+ else:
+ status = pq.ExecStatus(self._pgresult.status).name
+ return f"<{cls} [{status}] {info} at 0x{id(self):x}>"
@property
def connection(self) -> ConnectionType:
from . import _pq_ctypes as impl
from .misc import PGnotify, ConninfoOption, PQerror, PGresAttDesc
from .misc import error_message, connection_summary
-from ._enums import Format
+from ._enums import Format, ExecStatus
if TYPE_CHECKING:
from . import proto
def __del__(self) -> None:
self.clear()
+ def __repr__(self) -> str:
+ cls = f"{self.__class__.__module__}.{self.__class__.__qualname__}"
+ status = ExecStatus(self.status)
+ return f"<{cls} [{status.name}] at 0x{id(self):x}>"
+
def clear(self) -> None:
self.pgresult_ptr, p = None, self.pgresult_ptr
if p:
from cpython.mem cimport PyMem_Malloc, PyMem_Free
from psycopg3.pq.misc import PGresAttDesc
+from psycopg3.pq._enums import ExecStatus
cdef class PGresult:
def __dealloc__(self) -> None:
self.clear()
+ def __repr__(self) -> str:
+ cls = f"{self.__class__.__module__}.{self.__class__.__qualname__}"
+ status = ExecStatus(self.status)
+ return f"<{cls} [{status.name}] at 0x{id(self):x}>"
+
def clear(self) -> None:
if self.pgresult_ptr is not NULL:
libpq.PQclear(self.pgresult_ptr)
def test_status(pgconn, command, status):
res = pgconn.exec_(command)
assert res.status == getattr(pq.ExecStatus, status)
+ assert status in repr(res)
def test_clear(pgconn):
def test_str(conn):
cur = conn.cursor()
assert "[IDLE]" in str(cur)
- assert "(closed)" not in str(cur)
+ assert "[closed]" not in str(cur)
+ assert "[no result]" in str(cur)
+ cur.execute("select 1")
+ assert "[INTRANS]" in str(cur)
+ assert "[TUPLES_OK]" in str(cur)
+ assert "[closed]" not in str(cur)
+ assert "[no result]" not in str(cur)
cur.close()
- assert "(closed)" in str(cur)
- assert "[IDLE]" in str(cur)
+ assert "[closed]" in str(cur)
+ assert "[INTRANS]" in str(cur)
async def test_str(aconn):
cur = await aconn.cursor()
assert "[IDLE]" in str(cur)
- assert "(closed)" not in str(cur)
+ assert "[closed]" not in str(cur)
+ assert "[no result]" in str(cur)
+ await cur.execute("select 1")
+ assert "[INTRANS]" in str(cur)
+ assert "[TUPLES_OK]" in str(cur)
+ assert "[closed]" not in str(cur)
+ assert "[no result]" not in str(cur)
await cur.close()
- assert "(closed)" in str(cur)
- assert "[IDLE]" in str(cur)
+ assert "[closed]" in str(cur)
+ assert "[INTRANS]" in str(cur)