From cc6d2a4098b844516e26e0f9e201ebd99f9ff1b1 Mon Sep 17 00:00:00 2001 From: Davide Mendolia Date: Sun, 22 Mar 2026 13:36:08 +0100 Subject: [PATCH 1/3] chore(python): upgrade OpenTelemetry to 1.40.0 / 0.61b0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps all OTel packages to the latest stable release: - opentelemetry-api/sdk/proto/exporter: 1.29.0 → 1.40.0 - all instrumentation packages: 0.50b0 → 0.61b0 Side effect: deprecated package removed (no longer a transitive dependency), wrapt downgraded 2.0.1 → 1.17.3 to satisfy new instrumentation constraints. Co-Authored-By: Claude Sonnet 4.6 --- src/python/poetry.lock | 187 +++++++++++++++++------------------- src/python/pyproject.toml | 14 +-- src/python/requirements.txt | 27 +++--- 3 files changed, 106 insertions(+), 122 deletions(-) diff --git a/src/python/poetry.lock b/src/python/poetry.lock index 046b4e43..c0f44b82 100644 --- a/src/python/poetry.lock +++ b/src/python/poetry.lock @@ -422,24 +422,6 @@ files = [ [package.extras] toml = ["tomli ; python_full_version <= \"3.11.0a6\""] -[[package]] -name = "deprecated" -version = "1.3.1" -description = "Python @deprecated decorator to deprecate old python classes, functions or methods." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" -groups = ["main"] -files = [ - {file = "deprecated-1.3.1-py2.py3-none-any.whl", hash = "sha256:597bfef186b6f60181535a29fbe44865ce137a5079f295b479886c82729d5f3f"}, - {file = "deprecated-1.3.1.tar.gz", hash = "sha256:b1b50e0ff0c1fddaa5708a2c6b0a6588bb09b892825ab2b214ac9ea9d92a5223"}, -] - -[package.dependencies] -wrapt = ">=1.10,<3" - -[package.extras] -dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "setuptools ; python_version >= \"3.12\"", "tox"] - [[package]] name = "docker" version = "7.1.0" @@ -969,135 +951,138 @@ files = [ [[package]] name = "opentelemetry-api" -version = "1.29.0" +version = "1.40.0" description = "OpenTelemetry Python API" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "opentelemetry_api-1.29.0-py3-none-any.whl", hash = "sha256:5fcd94c4141cc49c736271f3e1efb777bebe9cc535759c54c936cca4f1b312b8"}, - {file = "opentelemetry_api-1.29.0.tar.gz", hash = "sha256:d04a6cf78aad09614f52964ecb38021e248f5714dc32c2e0d8fd99517b4d69cf"}, + {file = "opentelemetry_api-1.40.0-py3-none-any.whl", hash = "sha256:82dd69331ae74b06f6a874704be0cfaa49a1650e1537d4a813b86ecef7d0ecf9"}, + {file = "opentelemetry_api-1.40.0.tar.gz", hash = "sha256:159be641c0b04d11e9ecd576906462773eb97ae1b657730f0ecf64d32071569f"}, ] [package.dependencies] -deprecated = ">=1.2.6" -importlib-metadata = ">=6.0,<=8.5.0" +importlib-metadata = ">=6.0,<8.8.0" +typing-extensions = ">=4.5.0" [[package]] name = "opentelemetry-exporter-otlp-proto-common" -version = "1.29.0" +version = "1.40.0" description = "OpenTelemetry Protobuf encoding" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "opentelemetry_exporter_otlp_proto_common-1.29.0-py3-none-any.whl", hash = "sha256:a9d7376c06b4da9cf350677bcddb9618ed4b8255c3f6476975f5e38274ecd3aa"}, - {file = "opentelemetry_exporter_otlp_proto_common-1.29.0.tar.gz", hash = "sha256:e7c39b5dbd1b78fe199e40ddfe477e6983cb61aa74ba836df09c3869a3e3e163"}, + {file = "opentelemetry_exporter_otlp_proto_common-1.40.0-py3-none-any.whl", hash = "sha256:7081ff453835a82417bf38dccf122c827c3cbc94f2079b03bba02a3165f25149"}, + {file = "opentelemetry_exporter_otlp_proto_common-1.40.0.tar.gz", hash = "sha256:1cbee86a4064790b362a86601ee7934f368b81cd4cc2f2e163902a6e7818a0fa"}, ] [package.dependencies] -opentelemetry-proto = "1.29.0" +opentelemetry-proto = "1.40.0" [[package]] name = "opentelemetry-exporter-otlp-proto-grpc" -version = "1.29.0" +version = "1.40.0" description = "OpenTelemetry Collector Protobuf over gRPC Exporter" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "opentelemetry_exporter_otlp_proto_grpc-1.29.0-py3-none-any.whl", hash = "sha256:5a2a3a741a2543ed162676cf3eefc2b4150e6f4f0a193187afb0d0e65039c69c"}, - {file = "opentelemetry_exporter_otlp_proto_grpc-1.29.0.tar.gz", hash = "sha256:3d324d07d64574d72ed178698de3d717f62a059a93b6b7685ee3e303384e73ea"}, + {file = "opentelemetry_exporter_otlp_proto_grpc-1.40.0-py3-none-any.whl", hash = "sha256:2aa0ca53483fe0cf6405087a7491472b70335bc5c7944378a0a8e72e86995c52"}, + {file = "opentelemetry_exporter_otlp_proto_grpc-1.40.0.tar.gz", hash = "sha256:bd4015183e40b635b3dab8da528b27161ba83bf4ef545776b196f0fb4ec47740"}, ] [package.dependencies] -deprecated = ">=1.2.6" -googleapis-common-protos = ">=1.52,<2.0" -grpcio = ">=1.63.2,<2.0.0" +googleapis-common-protos = ">=1.57,<2.0" +grpcio = {version = ">=1.75.1,<2.0.0", markers = "python_version >= \"3.14\""} opentelemetry-api = ">=1.15,<2.0" -opentelemetry-exporter-otlp-proto-common = "1.29.0" -opentelemetry-proto = "1.29.0" -opentelemetry-sdk = ">=1.29.0,<1.30.0" +opentelemetry-exporter-otlp-proto-common = "1.40.0" +opentelemetry-proto = "1.40.0" +opentelemetry-sdk = ">=1.40.0,<1.41.0" +typing-extensions = ">=4.6.0" + +[package.extras] +gcp-auth = ["opentelemetry-exporter-credential-provider-gcp (>=0.59b0)"] [[package]] name = "opentelemetry-instrumentation" -version = "0.50b0" +version = "0.61b0" description = "Instrumentation Tools & Auto Instrumentation for OpenTelemetry Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "opentelemetry_instrumentation-0.50b0-py3-none-any.whl", hash = "sha256:b8f9fc8812de36e1c6dffa5bfc6224df258841fb387b6dfe5df15099daa10630"}, - {file = "opentelemetry_instrumentation-0.50b0.tar.gz", hash = "sha256:7d98af72de8dec5323e5202e46122e5f908592b22c6d24733aad619f07d82979"}, + {file = "opentelemetry_instrumentation-0.61b0-py3-none-any.whl", hash = "sha256:92a93a280e69788e8f88391247cc530fd81f16f2b011979d4d6398f805cfbc63"}, + {file = "opentelemetry_instrumentation-0.61b0.tar.gz", hash = "sha256:cb21b48db738c9de196eba6b805b4ff9de3b7f187e4bbf9a466fa170514f1fc7"}, ] [package.dependencies] opentelemetry-api = ">=1.4,<2.0" -opentelemetry-semantic-conventions = "0.50b0" +opentelemetry-semantic-conventions = "0.61b0" packaging = ">=18.0" wrapt = ">=1.0.0,<2.0.0" [[package]] name = "opentelemetry-instrumentation-asgi" -version = "0.50b0" +version = "0.61b0" description = "ASGI instrumentation for OpenTelemetry" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "opentelemetry_instrumentation_asgi-0.50b0-py3-none-any.whl", hash = "sha256:2ba1297f746e55dec5a17fe825689da0613662fb25c004c3965a6c54b1d5be22"}, - {file = "opentelemetry_instrumentation_asgi-0.50b0.tar.gz", hash = "sha256:3ca4cb5616ae6a3e8ce86e7d5c360a8d8cc8ed722cf3dc8a5e44300774e87d49"}, + {file = "opentelemetry_instrumentation_asgi-0.61b0-py3-none-any.whl", hash = "sha256:e4b3ce6b66074e525e717efff20745434e5efd5d9df6557710856fba356da7a4"}, + {file = "opentelemetry_instrumentation_asgi-0.61b0.tar.gz", hash = "sha256:9d08e127244361dc33976d39dd4ca8f128b5aa5a7ae425208400a80a095019b5"}, ] [package.dependencies] asgiref = ">=3.0,<4.0" opentelemetry-api = ">=1.12,<2.0" -opentelemetry-instrumentation = "0.50b0" -opentelemetry-semantic-conventions = "0.50b0" -opentelemetry-util-http = "0.50b0" +opentelemetry-instrumentation = "0.61b0" +opentelemetry-semantic-conventions = "0.61b0" +opentelemetry-util-http = "0.61b0" [package.extras] instruments = ["asgiref (>=3.0,<4.0)"] [[package]] name = "opentelemetry-instrumentation-fastapi" -version = "0.50b0" +version = "0.61b0" description = "OpenTelemetry FastAPI Instrumentation" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "opentelemetry_instrumentation_fastapi-0.50b0-py3-none-any.whl", hash = "sha256:8f03b738495e4705fbae51a2826389c7369629dace89d0f291c06ffefdff5e52"}, - {file = "opentelemetry_instrumentation_fastapi-0.50b0.tar.gz", hash = "sha256:16b9181682136da210295def2bb304a32fb9bdee9a935cdc9da43567f7c1149e"}, + {file = "opentelemetry_instrumentation_fastapi-0.61b0-py3-none-any.whl", hash = "sha256:a1a844d846540d687d377516b2ff698b51d87c781b59f47c214359c4a241047c"}, + {file = "opentelemetry_instrumentation_fastapi-0.61b0.tar.gz", hash = "sha256:3a24f35b07c557ae1bbc483bf8412221f25d79a405f8b047de8b670722e2fa9f"}, ] [package.dependencies] opentelemetry-api = ">=1.12,<2.0" -opentelemetry-instrumentation = "0.50b0" -opentelemetry-instrumentation-asgi = "0.50b0" -opentelemetry-semantic-conventions = "0.50b0" -opentelemetry-util-http = "0.50b0" +opentelemetry-instrumentation = "0.61b0" +opentelemetry-instrumentation-asgi = "0.61b0" +opentelemetry-semantic-conventions = "0.61b0" +opentelemetry-util-http = "0.61b0" [package.extras] -instruments = ["fastapi (>=0.58,<1.0)"] +instruments = ["fastapi (>=0.92,<1.0)"] [[package]] name = "opentelemetry-instrumentation-httpx" -version = "0.50b0" +version = "0.61b0" description = "OpenTelemetry HTTPX Instrumentation" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "opentelemetry_instrumentation_httpx-0.50b0-py3-none-any.whl", hash = "sha256:27acd41a9e70384d0978d58f492e5c16fc7a1b2363d5992b5bd0a27a3df7b68e"}, - {file = "opentelemetry_instrumentation_httpx-0.50b0.tar.gz", hash = "sha256:0072d1d39552449c08a45a7a0db0cd6af32c85205bd97267b2a272fc56a9b438"}, + {file = "opentelemetry_instrumentation_httpx-0.61b0-py3-none-any.whl", hash = "sha256:dee05c93a6593a5dc3ae5d9d5c01df8b4e2c5d02e49275e5558534ee46343d5e"}, + {file = "opentelemetry_instrumentation_httpx-0.61b0.tar.gz", hash = "sha256:6569ec097946c5551c2a4252f74c98666addd1bf047c1dde6b4ef426719ff8dd"}, ] [package.dependencies] opentelemetry-api = ">=1.12,<2.0" -opentelemetry-instrumentation = "0.50b0" -opentelemetry-semantic-conventions = "0.50b0" -opentelemetry-util-http = "0.50b0" +opentelemetry-instrumentation = "0.61b0" +opentelemetry-semantic-conventions = "0.61b0" +opentelemetry-util-http = "0.61b0" wrapt = ">=1.0.0,<2.0.0" [package.extras] @@ -1105,36 +1090,36 @@ instruments = ["httpx (>=0.18.0)"] [[package]] name = "opentelemetry-instrumentation-logging" -version = "0.50b0" +version = "0.61b0" description = "OpenTelemetry Logging instrumentation" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "opentelemetry_instrumentation_logging-0.50b0-py3-none-any.whl", hash = "sha256:b33e301e1533f9d3b1bd5bf0ed2d938378b17cdd470c9dc04c61307357f6b302"}, - {file = "opentelemetry_instrumentation_logging-0.50b0.tar.gz", hash = "sha256:7f5f9e28f7ccdac9b9a5dc09830e4a70331c59184f7788bff499f44d1393225a"}, + {file = "opentelemetry_instrumentation_logging-0.61b0-py3-none-any.whl", hash = "sha256:6d87e5ded6a0128d775d41511f8380910a1b610671081d16efb05ac3711c0074"}, + {file = "opentelemetry_instrumentation_logging-0.61b0.tar.gz", hash = "sha256:feaa30b700acd2a37cc81db5f562ab0c3a5b6cc2453595e98b72c01dcf649584"}, ] [package.dependencies] opentelemetry-api = ">=1.12,<2.0" -opentelemetry-instrumentation = "0.50b0" +opentelemetry-instrumentation = "0.61b0" [[package]] name = "opentelemetry-instrumentation-sqlalchemy" -version = "0.50b0" +version = "0.61b0" description = "OpenTelemetry SQLAlchemy instrumentation" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "opentelemetry_instrumentation_sqlalchemy-0.50b0-py3-none-any.whl", hash = "sha256:7385c380d3567f28a5a6e9b453400900f4b095230a244a13e3f54b4f3d36bd19"}, - {file = "opentelemetry_instrumentation_sqlalchemy-0.50b0.tar.gz", hash = "sha256:8560fe2375d973746907599f360199ba0f658189ef6feba73c1702e8d832bb6e"}, + {file = "opentelemetry_instrumentation_sqlalchemy-0.61b0-py3-none-any.whl", hash = "sha256:f115e0be54116ba4c327b8d7b68db4045ee18d44439d888ab8130a549c50d1c1"}, + {file = "opentelemetry_instrumentation_sqlalchemy-0.61b0.tar.gz", hash = "sha256:13a3a159a2043a52f0180b3757fbaa26741b0e08abb50deddce4394c118956e6"}, ] [package.dependencies] opentelemetry-api = ">=1.12,<2.0" -opentelemetry-instrumentation = "0.50b0" -opentelemetry-semantic-conventions = "0.50b0" +opentelemetry-instrumentation = "0.61b0" +opentelemetry-semantic-conventions = "0.61b0" packaging = ">=21.0" wrapt = ">=1.11.2" @@ -1143,62 +1128,62 @@ instruments = ["sqlalchemy (>=1.0.0,<2.1.0)"] [[package]] name = "opentelemetry-proto" -version = "1.29.0" +version = "1.40.0" description = "OpenTelemetry Python Proto" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "opentelemetry_proto-1.29.0-py3-none-any.whl", hash = "sha256:495069c6f5495cbf732501cdcd3b7f60fda2b9d3d4255706ca99b7ca8dec53ff"}, - {file = "opentelemetry_proto-1.29.0.tar.gz", hash = "sha256:3c136aa293782e9b44978c738fff72877a4b78b5d21a64e879898db7b2d93e5d"}, + {file = "opentelemetry_proto-1.40.0-py3-none-any.whl", hash = "sha256:266c4385d88923a23d63e353e9761af0f47a6ed0d486979777fe4de59dc9b25f"}, + {file = "opentelemetry_proto-1.40.0.tar.gz", hash = "sha256:03f639ca129ba513f5819810f5b1f42bcb371391405d99c168fe6937c62febcd"}, ] [package.dependencies] -protobuf = ">=5.0,<6.0" +protobuf = ">=5.0,<7.0" [[package]] name = "opentelemetry-sdk" -version = "1.29.0" +version = "1.40.0" description = "OpenTelemetry Python SDK" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "opentelemetry_sdk-1.29.0-py3-none-any.whl", hash = "sha256:173be3b5d3f8f7d671f20ea37056710217959e774e2749d984355d1f9391a30a"}, - {file = "opentelemetry_sdk-1.29.0.tar.gz", hash = "sha256:b0787ce6aade6ab84315302e72bd7a7f2f014b0fb1b7c3295b88afe014ed0643"}, + {file = "opentelemetry_sdk-1.40.0-py3-none-any.whl", hash = "sha256:787d2154a71f4b3d81f20524a8ce061b7db667d24e46753f32a7bc48f1c1f3f1"}, + {file = "opentelemetry_sdk-1.40.0.tar.gz", hash = "sha256:18e9f5ec20d859d268c7cb3c5198c8d105d073714db3de50b593b8c1345a48f2"}, ] [package.dependencies] -opentelemetry-api = "1.29.0" -opentelemetry-semantic-conventions = "0.50b0" -typing-extensions = ">=3.7.4" +opentelemetry-api = "1.40.0" +opentelemetry-semantic-conventions = "0.61b0" +typing-extensions = ">=4.5.0" [[package]] name = "opentelemetry-semantic-conventions" -version = "0.50b0" +version = "0.61b0" description = "OpenTelemetry Semantic Conventions" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "opentelemetry_semantic_conventions-0.50b0-py3-none-any.whl", hash = "sha256:e87efba8fdb67fb38113efea6a349531e75ed7ffc01562f65b802fcecb5e115e"}, - {file = "opentelemetry_semantic_conventions-0.50b0.tar.gz", hash = "sha256:02dc6dbcb62f082de9b877ff19a3f1ffaa3c306300fa53bfac761c4567c83d38"}, + {file = "opentelemetry_semantic_conventions-0.61b0-py3-none-any.whl", hash = "sha256:fa530a96be229795f8cef353739b618148b0fe2b4b3f005e60e262926c4d38e2"}, + {file = "opentelemetry_semantic_conventions-0.61b0.tar.gz", hash = "sha256:072f65473c5d7c6dc0355b27d6c9d1a679d63b6d4b4b16a9773062cb7e31192a"}, ] [package.dependencies] -deprecated = ">=1.2.6" -opentelemetry-api = "1.29.0" +opentelemetry-api = "1.40.0" +typing-extensions = ">=4.5.0" [[package]] name = "opentelemetry-util-http" -version = "0.50b0" +version = "0.61b0" description = "Web util for OpenTelemetry" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "opentelemetry_util_http-0.50b0-py3-none-any.whl", hash = "sha256:21f8aedac861ffa3b850f8c0a6c373026189eb8630ac6e14a2bf8c55695cc090"}, - {file = "opentelemetry_util_http-0.50b0.tar.gz", hash = "sha256:dc4606027e1bc02aabb9533cc330dd43f874fca492e4175c31d7154f341754af"}, + {file = "opentelemetry_util_http-0.61b0-py3-none-any.whl", hash = "sha256:8e715e848233e9527ea47e275659ea60a57a75edf5206a3b937e236a6da5fc33"}, + {file = "opentelemetry_util_http-0.61b0.tar.gz", hash = "sha256:1039cb891334ad2731affdf034d8fb8b48c239af9b6dd295e5fabd07f1c95572"}, ] [[package]] @@ -2117,4 +2102,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.1" python-versions = "^3.14" -content-hash = "c9738d97c1292874111be8eab623cda8fd4e83f3de35e6a00fa1f490e9359272" +content-hash = "f3da2fe6dcb57c53241d1b3f0c72107c8947bbd4b3f0ed6e4b12a4de050fff96" diff --git a/src/python/pyproject.toml b/src/python/pyproject.toml index 77afec7f..9714c5c0 100644 --- a/src/python/pyproject.toml +++ b/src/python/pyproject.toml @@ -29,13 +29,13 @@ sqlalchemy = {extras = ["asyncio"], version = "^2.0.36"} asyncpg = "^0.30.0" alembic = "^1.14.0" pydantic-settings = "^2.12.0" -opentelemetry-api = "^1.29" -opentelemetry-sdk = "^1.29" -opentelemetry-exporter-otlp-proto-grpc = "^1.29" -opentelemetry-instrumentation-fastapi = "^0.50b0" -opentelemetry-instrumentation-sqlalchemy = "^0.50b0" -opentelemetry-instrumentation-httpx = "^0.50b0" -opentelemetry-instrumentation-logging = "^0.50b0" +opentelemetry-api = "^1.40.0" +opentelemetry-sdk = "^1.40.0" +opentelemetry-exporter-otlp-proto-grpc = "^1.40.0" +opentelemetry-instrumentation-fastapi = "^0.61b0" +opentelemetry-instrumentation-sqlalchemy = "^0.61b0" +opentelemetry-instrumentation-httpx = "^0.61b0" +opentelemetry-instrumentation-logging = "^0.61b0" python-json-logger = "^2.0" httpx = "^0.27.2" diff --git a/src/python/requirements.txt b/src/python/requirements.txt index b0020351..a29fb057 100644 --- a/src/python/requirements.txt +++ b/src/python/requirements.txt @@ -6,7 +6,6 @@ asyncpg==0.30.0 ; python_version >= "3.14" and python_version < "4.0" certifi==2025.4.26 ; python_version >= "3.14" and python_version < "4.0" click==8.1.8 ; python_version >= "3.14" and python_version < "4.0" colorama==0.4.6 ; python_version >= "3.14" and python_version < "4.0" and platform_system == "Windows" -deprecated==1.3.1 ; python_version >= "3.14" and python_version < "4.0" fastapi==0.115.12 ; python_version >= "3.14" and python_version < "4.0" googleapis-common-protos==1.73.0 ; python_version >= "3.14" and python_version < "4.0" greenlet==3.3.1 ; python_version >= "3.14" and python_version < "4.0" and (platform_machine == "aarch64" or platform_machine == "ppc64le" or platform_machine == "x86_64" or platform_machine == "amd64" or platform_machine == "AMD64" or platform_machine == "win32" or platform_machine == "WIN32") @@ -19,19 +18,19 @@ idna==3.10 ; python_version >= "3.14" and python_version < "4.0" importlib-metadata==8.5.0 ; python_version >= "3.14" and python_version < "4.0" mako==1.3.10 ; python_version >= "3.14" and python_version < "4.0" markupsafe==3.0.2 ; python_version >= "3.14" and python_version < "4.0" -opentelemetry-api==1.29.0 ; python_version >= "3.14" and python_version < "4.0" -opentelemetry-exporter-otlp-proto-common==1.29.0 ; python_version >= "3.14" and python_version < "4.0" -opentelemetry-exporter-otlp-proto-grpc==1.29.0 ; python_version >= "3.14" and python_version < "4.0" -opentelemetry-instrumentation-asgi==0.50b0 ; python_version >= "3.14" and python_version < "4.0" -opentelemetry-instrumentation-fastapi==0.50b0 ; python_version >= "3.14" and python_version < "4.0" -opentelemetry-instrumentation-httpx==0.50b0 ; python_version >= "3.14" and python_version < "4.0" -opentelemetry-instrumentation-logging==0.50b0 ; python_version >= "3.14" and python_version < "4.0" -opentelemetry-instrumentation-sqlalchemy==0.50b0 ; python_version >= "3.14" and python_version < "4.0" -opentelemetry-instrumentation==0.50b0 ; python_version >= "3.14" and python_version < "4.0" -opentelemetry-proto==1.29.0 ; python_version >= "3.14" and python_version < "4.0" -opentelemetry-sdk==1.29.0 ; python_version >= "3.14" and python_version < "4.0" -opentelemetry-semantic-conventions==0.50b0 ; python_version >= "3.14" and python_version < "4.0" -opentelemetry-util-http==0.50b0 ; python_version >= "3.14" and python_version < "4.0" +opentelemetry-api==1.40.0 ; python_version >= "3.14" and python_version < "4.0" +opentelemetry-exporter-otlp-proto-common==1.40.0 ; python_version >= "3.14" and python_version < "4.0" +opentelemetry-exporter-otlp-proto-grpc==1.40.0 ; python_version >= "3.14" and python_version < "4.0" +opentelemetry-instrumentation-asgi==0.61b0 ; python_version >= "3.14" and python_version < "4.0" +opentelemetry-instrumentation-fastapi==0.61b0 ; python_version >= "3.14" and python_version < "4.0" +opentelemetry-instrumentation-httpx==0.61b0 ; python_version >= "3.14" and python_version < "4.0" +opentelemetry-instrumentation-logging==0.61b0 ; python_version >= "3.14" and python_version < "4.0" +opentelemetry-instrumentation-sqlalchemy==0.61b0 ; python_version >= "3.14" and python_version < "4.0" +opentelemetry-instrumentation==0.61b0 ; python_version >= "3.14" and python_version < "4.0" +opentelemetry-proto==1.40.0 ; python_version >= "3.14" and python_version < "4.0" +opentelemetry-sdk==1.40.0 ; python_version >= "3.14" and python_version < "4.0" +opentelemetry-semantic-conventions==0.61b0 ; python_version >= "3.14" and python_version < "4.0" +opentelemetry-util-http==0.61b0 ; python_version >= "3.14" and python_version < "4.0" packaging==25.0 ; python_version >= "3.14" and python_version < "4.0" protobuf==5.29.6 ; python_version >= "3.14" and python_version < "4.0" pydantic-core==2.41.5 ; python_version >= "3.14" and python_version < "4.0" From 34f7ad6f1daf5b39a56eea1f34745b8e301b15be Mon Sep 17 00:00:00 2001 From: Davide Mendolia Date: Sun, 22 Mar 2026 13:56:51 +0100 Subject: [PATCH 2/3] chore(python): add opentelemetry-distro 0.61b0 Adds the opentelemetry-distro meta-package which bundles the core OTel packages and provides the opentelemetry-bootstrap CLI for auto-discovering instrumentation dependencies. Co-Authored-By: Claude Sonnet 4.6 --- src/python/poetry.lock | 22 +++++++++++++++++++++- src/python/pyproject.toml | 1 + src/python/requirements.txt | 1 + 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/python/poetry.lock b/src/python/poetry.lock index c0f44b82..a827fe24 100644 --- a/src/python/poetry.lock +++ b/src/python/poetry.lock @@ -965,6 +965,26 @@ files = [ importlib-metadata = ">=6.0,<8.8.0" typing-extensions = ">=4.5.0" +[[package]] +name = "opentelemetry-distro" +version = "0.61b0" +description = "OpenTelemetry Python Distro" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "opentelemetry_distro-0.61b0-py3-none-any.whl", hash = "sha256:f21d1ac0627549795d75e332006dd068877f00e461b1b2e8fe4568d6eb7b9590"}, + {file = "opentelemetry_distro-0.61b0.tar.gz", hash = "sha256:975b845f50181ad53753becf4fd4b123b54fa04df5a9d78812264436d6518981"}, +] + +[package.dependencies] +opentelemetry-api = ">=1.12,<2.0" +opentelemetry-instrumentation = "0.61b0" +opentelemetry-sdk = ">=1.13,<2.0" + +[package.extras] +otlp = ["opentelemetry-exporter-otlp (==1.40.0)"] + [[package]] name = "opentelemetry-exporter-otlp-proto-common" version = "1.40.0" @@ -2102,4 +2122,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.1" python-versions = "^3.14" -content-hash = "f3da2fe6dcb57c53241d1b3f0c72107c8947bbd4b3f0ed6e4b12a4de050fff96" +content-hash = "b374a71e60064188e4115c659d783b3bf933f513fbe8b2ca320b348a02e759a8" diff --git a/src/python/pyproject.toml b/src/python/pyproject.toml index 9714c5c0..335beb9a 100644 --- a/src/python/pyproject.toml +++ b/src/python/pyproject.toml @@ -38,6 +38,7 @@ opentelemetry-instrumentation-httpx = "^0.61b0" opentelemetry-instrumentation-logging = "^0.61b0" python-json-logger = "^2.0" httpx = "^0.27.2" +opentelemetry-distro = "^0.61b0" [tool.poetry.group.dev.dependencies] pytest = "^8.3.5" diff --git a/src/python/requirements.txt b/src/python/requirements.txt index a29fb057..4ec4126a 100644 --- a/src/python/requirements.txt +++ b/src/python/requirements.txt @@ -19,6 +19,7 @@ importlib-metadata==8.5.0 ; python_version >= "3.14" and python_version < "4.0" mako==1.3.10 ; python_version >= "3.14" and python_version < "4.0" markupsafe==3.0.2 ; python_version >= "3.14" and python_version < "4.0" opentelemetry-api==1.40.0 ; python_version >= "3.14" and python_version < "4.0" +opentelemetry-distro==0.61b0 ; python_version >= "3.14" and python_version < "4.0" opentelemetry-exporter-otlp-proto-common==1.40.0 ; python_version >= "3.14" and python_version < "4.0" opentelemetry-exporter-otlp-proto-grpc==1.40.0 ; python_version >= "3.14" and python_version < "4.0" opentelemetry-instrumentation-asgi==0.61b0 ; python_version >= "3.14" and python_version < "4.0" From 12ff9b580ad9dd38303c42494f861791f54aaafc Mon Sep 17 00:00:00 2001 From: Davide Mendolia Date: Sun, 22 Mar 2026 14:18:16 +0100 Subject: [PATCH 3/3] feat(python): add Procfile for opentelemetry-instrument production entrypoint Adds a Procfile that wraps uvicorn with opentelemetry-instrument for Cloud Run deployments, delegating SDK initialisation and auto-instrumentation to the CLI wrapper via OTEL_* env vars. Local development via `poetry run start` continues to use the programmatic configure_telemetry() + FastAPIInstrumentor path unchanged. Co-Authored-By: Claude Sonnet 4.6 --- src/python/Procfile | 1 + src/python/src/openapi_server/cli.py | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 src/python/Procfile diff --git a/src/python/Procfile b/src/python/Procfile new file mode 100644 index 00000000..ec2fe02c --- /dev/null +++ b/src/python/Procfile @@ -0,0 +1 @@ +web: opentelemetry-instrument uvicorn src.openapi_server.main:app --host 0.0.0.0 --port ${PORT:-8080} diff --git a/src/python/src/openapi_server/cli.py b/src/python/src/openapi_server/cli.py index d525aed9..b72f7c81 100644 --- a/src/python/src/openapi_server/cli.py +++ b/src/python/src/openapi_server/cli.py @@ -82,7 +82,6 @@ def start_server(run_migrations: bool = True, port: int | None = None): # Resolve port: CLI argument > PORT env var > default (8080) server_port = port if port is not None else int(os.getenv("PORT", "8080")) - # Start uvicorn server uvicorn.run( "src.openapi_server.main:app", host="0.0.0.0",