]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
feat: add pq.version_pretty() function
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Tue, 9 Apr 2024 13:54:55 +0000 (15:54 +0200)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Fri, 12 Apr 2024 22:09:08 +0000 (00:09 +0200)
psycopg/psycopg/pq/__init__.py
psycopg/psycopg/pq/misc.py
tests/pq/test_misc.py

index 4d819ff947b7501f577b1dc07e9c00040e039750..6887ee5e3899b6b55fd5f20733141c31cf8171be 100644 (file)
@@ -15,7 +15,7 @@ from typing import Callable, List, Type
 
 from . import abc
 from .misc import ConninfoOption, PGnotify, PGresAttDesc
-from .misc import error_message
+from .misc import error_message, version_pretty
 from ._enums import ConnStatus, DiagnosticField, ExecStatus, Format, Trace
 from ._enums import Ping, PipelineStatus, PollingStatus, TransactionStatus
 
@@ -132,4 +132,5 @@ __all__ = (
     "error_message",
     "ConninfoOption",
     "version",
+    "version_pretty",
 )
index 17f14d3235697a173cc5fc02dab4daf49cdbc760..c671bf25f1233b6485efaddd0c2972e3529978fa 100644 (file)
@@ -175,3 +175,17 @@ def connection_summary(pgconn: PGconn) -> str:
     if sparts:
         sparts = f" ({sparts})"
     return f"[{status}]{sparts}"
+
+
+def version_pretty(version: int) -> str:
+    """
+    Return a pretty representation of a PostgreSQL version
+
+    For instance: 140002 -> 14.2, 90610 -> 9.6.10
+    """
+    version, patch = divmod(version, 100)
+    major, minor = divmod(version, 100)
+    if major >= 10 and minor == 0:
+        return f"{major}.{patch}"
+    else:
+        return f"{major}.{minor}.{patch}"
index 599758fd33ddbfe58d292a83d73204c5b565ea6a..868abce6e75fb13d97417d77407de741efae9f06 100644 (file)
@@ -81,3 +81,11 @@ def test_result_set_attrs(pgconn):
 
     with pytest.raises(psycopg.OperationalError):
         res.set_attributes(attrs)
+
+
+@pytest.mark.parametrize(
+    "intv, strv",
+    [(91020, "9.10.20"), (100004, "10.4"), (101112, "10.11.12")],
+)
+def test_version_pretty(intv, strv):
+    assert pq.version_pretty(intv) == strv