From c4b89bff4a390b647a09358fe057ce67880291d8 Mon Sep 17 00:00:00 2001 From: Robsdedude Date: Mon, 27 Nov 2023 12:38:37 +0100 Subject: [PATCH] Materialize optional Rust extension in metadata --- src/neo4j/_codec/packstream/__init__.py | 6 +++++- src/neo4j/_codec/packstream/_common.py | 2 ++ src/neo4j/_meta.py | 14 ++++++++++---- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/neo4j/_codec/packstream/__init__.py b/src/neo4j/_codec/packstream/__init__.py index 867caefae..92aec5e8c 100644 --- a/src/neo4j/_codec/packstream/__init__.py +++ b/src/neo4j/_codec/packstream/__init__.py @@ -14,9 +14,13 @@ # limitations under the License. -from ._common import Structure +from ._common import ( + RUST_AVAILABLE, + Structure, +) __all__ = [ "Structure", + "RUST_AVAILABLE", ] diff --git a/src/neo4j/_codec/packstream/_common.py b/src/neo4j/_codec/packstream/_common.py index 2f9e9ddcc..0581eebf1 100644 --- a/src/neo4j/_codec/packstream/_common.py +++ b/src/neo4j/_codec/packstream/_common.py @@ -16,5 +16,7 @@ try: from ._rust import Structure + RUST_AVAILABLE = True except ImportError: from ._python import Structure + RUST_AVAILABLE = False diff --git a/src/neo4j/_meta.py b/src/neo4j/_meta.py index 02515e97c..3d282d7a5 100644 --- a/src/neo4j/_meta.py +++ b/src/neo4j/_meta.py @@ -25,6 +25,8 @@ from inspect import isclass from warnings import warn +from ._codec.packstream import RUST_AVAILABLE + if t.TYPE_CHECKING: _FuncT = t.TypeVar("_FuncT", bound=t.Callable) @@ -40,13 +42,17 @@ def _compute_bolt_agent() -> t.Dict[str, str]: def format_version_info(version_info): return "{}.{}.{}-{}-{}".format(*version_info) + language = "Python" + if RUST_AVAILABLE: + language += "-Rust" + return { "product": f"neo4j-python/{version}", "platform": f"{platform.system() or 'Unknown'} " f"{platform.release() or 'unknown'}; " f"{platform.machine() or 'unknown'}", - "language": f"Python/{format_version_info(sys.version_info)}", + "language": f"{language}/{format_version_info(sys.version_info)}", "language_details": f"{platform.python_implementation()}; " f"{format_version_info(sys.implementation.version)} " @@ -59,9 +65,9 @@ def format_version_info(version_info): def _compute_user_agent() -> str: - template = "neo4j-python/{} Python/{}.{}.{}-{}-{} ({})" - fields = (version,) + tuple(sys.version_info) + (sys.platform,) - return template.format(*fields) + return (f'{BOLT_AGENT_DICT["product"]} ' + f'{BOLT_AGENT_DICT["language"]} ' + f'({sys.platform})') USER_AGENT = _compute_user_agent()