From: Daniele Varrazzo Date: Tue, 9 Apr 2024 13:54:55 +0000 (+0200) Subject: feat: add pq.version_pretty() function X-Git-Tag: 3.2.0~45^2~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2ee2863af433404b450f241ad7fbe5eeb90a8521;p=thirdparty%2Fpsycopg.git feat: add pq.version_pretty() function --- diff --git a/psycopg/psycopg/pq/__init__.py b/psycopg/psycopg/pq/__init__.py index 4d819ff94..6887ee5e3 100644 --- a/psycopg/psycopg/pq/__init__.py +++ b/psycopg/psycopg/pq/__init__.py @@ -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", ) diff --git a/psycopg/psycopg/pq/misc.py b/psycopg/psycopg/pq/misc.py index 17f14d323..c671bf25f 100644 --- a/psycopg/psycopg/pq/misc.py +++ b/psycopg/psycopg/pq/misc.py @@ -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}" diff --git a/tests/pq/test_misc.py b/tests/pq/test_misc.py index 599758fd3..868abce6e 100644 --- a/tests/pq/test_misc.py +++ b/tests/pq/test_misc.py @@ -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