]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
Add ConnectionInfo.error_message, backend_pid
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Fri, 23 Apr 2021 00:29:53 +0000 (01:29 +0100)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Fri, 23 Apr 2021 00:29:53 +0000 (01:29 +0100)
docs/api/connections.rst
psycopg3/psycopg3/conninfo.py
tests/test_conninfo.py

index 566fbd06989a79d5bd3039733768149f2c560aff..7590e8ff0db8667a6b108e157fd24b8e8218b6e6 100644 (file)
@@ -273,6 +273,9 @@ Connection support objects
         server and not yet completed.
 
     .. autoattribute:: server_version
+    .. autoattribute:: backend_pid
+    .. autoattribute:: error_message
+
     .. automethod:: get_parameters
     .. autoattribute:: host
 
index 94d6149e4779f2c3c70354b7442bcd7629a54075..b2171b6834d80395e6e2f4edddd6ea1524cfd07f 100644 (file)
@@ -201,6 +201,14 @@ class ConnectionInfo:
         """
         return self.pgconn.server_version
 
+    @property
+    def backend_pid(self) -> int:
+        """
+        The process ID (PID) of the backend process handling this connection.
+        See :pq:`PQbackendPID`.
+        """
+        return self.pgconn.backend_pid
+
     @property
     def protocol_version(self) -> int:
         """
@@ -208,6 +216,14 @@ class ConnectionInfo:
         """
         return self.pgconn.protocol_version
 
+    @property
+    def error_message(self) -> str:
+        """
+        The error message most recently generated by an operation on the connection.
+        See :pq:`PQerrorMessage`.
+        """
+        return self._get_pgconn_attr("error_message")
+
     def _get_pgconn_attr(self, name: str) -> str:
         value: bytes = getattr(self.pgconn, name)
         return value.decode(self._pyenc)
index 64c75ef4583cf5fedbf7d5d7429761d051a4917e..ff5e9544e302350a028cf805dbb88f94bbbf41f0 100644 (file)
@@ -160,3 +160,23 @@ class TestConnectionInfo:
 
     def test_protocol_version(self, conn):
         assert conn.info.protocol_version >= 3
+
+    def test_error_message(self, conn):
+        assert conn.info.error_message == ""
+        with pytest.raises(psycopg3.ProgrammingError) as ex:
+            conn.execute("wat")
+
+        assert conn.info.error_message
+        assert str(ex.value) in conn.info.error_message
+        assert ex.value.diag.severity in conn.info.error_message
+
+        conn.close()
+        with pytest.raises(psycopg3.OperationalError):
+            conn.info.error_message
+
+    def test_backend_pid(self, conn):
+        assert conn.info.backend_pid
+        assert conn.info.backend_pid == conn.pgconn.backend_pid
+        conn.close()
+        with pytest.raises(psycopg3.OperationalError):
+            conn.info.backend_pid