]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
feat: add pretty repr to Pipeline objects
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Sun, 27 Mar 2022 20:04:47 +0000 (22:04 +0200)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Sat, 2 Apr 2022 23:17:57 +0000 (01:17 +0200)
psycopg/psycopg/_pipeline.py
tests/test_pipeline.py
tests/test_pipeline_async.py

index 8a745691064da347b9b6a8c8ac5e570cd0fad02f..edc1485a8b15cf43e87184ef148fd13b8f0c1c7a 100644 (file)
@@ -51,6 +51,11 @@ class BasePipeline:
         self.command_queue = Deque[PipelineCommand]()
         self.result_queue = Deque[PendingResult]()
 
+    def __repr__(self) -> str:
+        cls = f"{self.__class__.__module__}.{self.__class__.__qualname__}"
+        info = pq.misc.connection_summary(self._conn.pgconn)
+        return f"<{cls} {info} at 0x{id(self):x}>"
+
     @property
     def status(self) -> pq.PipelineStatus:
         return pq.PipelineStatus(self.pgconn.pipeline_status)
@@ -143,6 +148,7 @@ class BasePipeline:
 class Pipeline(BasePipeline):
     """Handler for connection in pipeline mode."""
 
+    __module__ = "psycopg"
     _conn: "Connection[Any]"
 
     def __init__(self, conn: "Connection[Any]") -> None:
@@ -176,6 +182,7 @@ class Pipeline(BasePipeline):
 class AsyncPipeline(BasePipeline):
     """Handler for async connection in pipeline mode."""
 
+    __module__ = "psycopg"
     _conn: "AsyncConnection[Any]"
 
     def __init__(self, conn: "AsyncConnection[Any]") -> None:
index 0079aa66cf9b94dfd02814eee352eda22c042f90..cfbfbad115937b3e0157f3ddf075061eb9b2ab7b 100644 (file)
@@ -10,6 +10,15 @@ from psycopg import errors as e
 pytestmark = pytest.mark.libpq(">= 14")
 
 
+def test_repr(conn):
+    with conn.pipeline() as p:
+        assert "psycopg.Pipeline" in repr(p)
+        assert "[IDLE]" in repr(p)
+
+    conn.close()
+    assert "[BAD]" in repr(p)
+
+
 def test_pipeline_status(conn: psycopg.Connection[Any]) -> None:
     assert conn._pipeline is None
     with conn.pipeline() as p:
index c306d63c835d9459053de087829a12afded63002..67265c7ee794f62207d80335b15debf8edd7d6fd 100644 (file)
@@ -13,6 +13,15 @@ pytestmark = [
 ]
 
 
+async def test_repr(aconn):
+    async with aconn.pipeline() as p:
+        assert "psycopg.AsyncPipeline" in repr(p)
+        assert "[IDLE]" in repr(p)
+
+    await aconn.close()
+    assert "[BAD]" in repr(p)
+
+
 async def test_pipeline_status(aconn: psycopg.AsyncConnection[Any]) -> None:
     assert aconn._pipeline is None
     async with aconn.pipeline() as p: