]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
Add ConnectionInfo.server_version, protocol_version
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Fri, 16 Apr 2021 18:17:03 +0000 (19:17 +0100)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Thu, 22 Apr 2021 10:57:00 +0000 (11:57 +0100)
docs/api/connections.rst
psycopg3/psycopg3/conninfo.py
tests/test_conninfo.py

index 7a06126613f3b194a7114f7590812b5e282d16b9..5a9f6dfb0fd61795451366a0c4b1f1f078cc5740 100644 (file)
@@ -253,21 +253,26 @@ Connection support objects
 
     The object is usually returned by `Connection.info`.
 
+    .. autoproperty:: status
+    .. autoproperty:: transaction_status
+    .. autoproperty:: server_version
+    .. automethod:: get_parameters
+
     .. autoproperty:: host
     .. autoproperty:: port
     .. autoproperty:: dbname
     .. autoproperty:: user
     .. autoproperty:: password
     .. autoproperty:: options
-    .. autoproperty:: status
-    .. autoproperty:: transaction_status
-    .. automethod:: get_parameters
     .. automethod:: parameter_status
 
         Example of parameters are ``server_version``,
         ``standard_conforming_string``... See :pq:`PQparameterStatus()` for
         all the available parameters.
 
+    .. autoproperty:: protocol_version
+
+
 .. rubric:: Objects involved in :ref:`transactions`
 
 .. autoclass:: Transaction()
index 292846e897cfd3ddb38be08bf640918c6a37cd22..a05884f9ea68362e2255fd420ebad8f80a08487a 100644 (file)
@@ -179,6 +179,23 @@ class ConnectionInfo:
         res = self.pgconn.parameter_status(param_name.encode(self._pyenc))
         return res.decode(self._pyenc) if res is not None else None
 
+    @property
+    def server_version(self) -> int:
+        """An integer representing the server version.
+
+        The number is formed by converting the major, minor, and revision
+        numbers into two-decimal-digit numbers and appending them together.
+        After PostgreSQL 10 the minor version was dropped, so the second group
+        of digits is always 00. For example, version 9.3.5 will be returned as
+        90305, version 10.2 as 100002. See :pq:`PQserverVersion()`.
+        """
+        return self.pgconn.server_version
+
+    @property
+    def protocol_version(self) -> int:
+        """The frontend/backend protocol currently used."""
+        return self.pgconn.protocol_version
+
     def _get_pgconn_attr(self, name: str) -> str:
         value: bytes = getattr(self.pgconn, name)
         return value.decode(self._pyenc)
index e6af8be711061d312735ad40df13acc577f62a52..b5343628465b5565996e92fda07835062fe7824a 100644 (file)
@@ -153,3 +153,9 @@ class TestConnectionInfo:
         tz = conn.info.parameter_status("TimeZone")
         assert tz and isinstance(tz, str)
         assert tz == conn.execute("show timezone").fetchone()[0]
+
+    def test_server_version(self, conn):
+        assert conn.info.server_version == conn.pgconn.server_version
+
+    def test_protocol_version(self, conn):
+        assert conn.info.protocol_version >= 3