From 32e6f6da92c8f4b137e6fc9c6cdb07c66c6cec86 Mon Sep 17 00:00:00 2001 From: Riccardo Magliocchetti Date: Thu, 1 Aug 2024 20:56:41 +0200 Subject: [PATCH] instrumentation/fastapi: fix fastapi-slim support (#2756) --- .github/workflows/instrumentations_1.yml | 2 +- CHANGELOG.md | 2 ++ .../instrumentation/fastapi/__init__.py | 18 ++++++++++++++---- tox.ini | 14 +++++++------- 4 files changed, 24 insertions(+), 12 deletions(-) diff --git a/.github/workflows/instrumentations_1.yml b/.github/workflows/instrumentations_1.yml index 40689bdc1..2658f4d4b 100644 --- a/.github/workflows/instrumentations_1.yml +++ b/.github/workflows/instrumentations_1.yml @@ -38,7 +38,7 @@ jobs: - "resource-detector-azure" - "resource-detector-container" - "util-http" - - "fastapi-slim" + - "fastapislim" - "processor-baggage" os: [ubuntu-20.04] exclude: diff --git a/CHANGELOG.md b/CHANGELOG.md index 0d1f17c43..a47bb6fe0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ([#2746](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/2746)) - `opentelemetry-instrumentation-grpc` Fixes the issue with the gRPC instrumentation not working with the 1.63.0 and higher version of gRPC ([#2483](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/2484)) +- `opentelemetry-instrumentation-fastapi` Fix fastapi-slim support + ([#2756](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/2756)) ## Version 1.26.0/0.47b0 (2024-07-23) diff --git a/instrumentation/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/__init__.py b/instrumentation/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/__init__.py index 9356093a4..bfb4f4a68 100644 --- a/instrumentation/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/__init__.py @@ -172,7 +172,7 @@ API --- """ import logging -from importlib.util import find_spec +from importlib.metadata import PackageNotFoundError, distribution from typing import Collection import fastapi @@ -285,10 +285,20 @@ class FastAPIInstrumentor(BaseInstrumentor): app._is_instrumented_by_opentelemetry = False def instrumentation_dependencies(self) -> Collection[str]: - if find_spec("fastapi") is not None: - return (_fastapi,) - if find_spec("fastapi_slim") is not None: + # need to use distribution because find_spec("fastapi") will return + # something even with just fastapi-slim installed + try: + distribution("fastapi-slim") return (_fastapi_slim,) + except PackageNotFoundError: + pass + + try: + distribution("fastapi") + return (_fastapi,) + except PackageNotFoundError: + pass + # If neither is installed, return both as potential dependencies return _instruments diff --git a/tox.ini b/tox.ini index 5e433d5bb..27eaaa912 100644 --- a/tox.ini +++ b/tox.ini @@ -116,9 +116,9 @@ envlist = ; opentelemetry-instrumentation-fastapi py3{8,9,10,11,12}-test-instrumentation-fastapi - py3{8,9,10,11,12}-test-instrumentation-fastapi-slim + py3{8,9,10,11,12}-test-instrumentation-fastapislim pypy3-test-instrumentation-fastapi - pypy3-test-instrumentation-fastapi-slim + pypy3-test-instrumentation-fastapislim lint-instrumentation-fastapi ; opentelemetry-instrumentation-flask @@ -556,11 +556,11 @@ commands_pre = fastapi: pip install opentelemetry-sdk@{env:CORE_REPO}\#egg=opentelemetry-sdk&subdirectory=opentelemetry-sdk fastapi: pip install opentelemetry-test-utils@{env:CORE_REPO}\#egg=opentelemetry-test-utils&subdirectory=tests/opentelemetry-test-utils fastapi: pip install -r {toxinidir}/instrumentation/opentelemetry-instrumentation-fastapi/test-requirements.txt - fastapi-slim: pip install opentelemetry-api@{env:CORE_REPO}\#egg=opentelemetry-api&subdirectory=opentelemetry-api - fastapi-slim: pip install opentelemetry-semantic-conventions@{env:CORE_REPO}\#egg=opentelemetry-semantic-conventions&subdirectory=opentelemetry-semantic-conventions - fastapi-slim: pip install opentelemetry-sdk@{env:CORE_REPO}\#egg=opentelemetry-sdk&subdirectory=opentelemetry-sdk - fastapi-slim: pip install opentelemetry-test-utils@{env:CORE_REPO}\#egg=opentelemetry-test-utils&subdirectory=tests/opentelemetry-test-utils - fastapi-slim: pip install -r {toxinidir}/instrumentation/opentelemetry-instrumentation-fastapi/test-requirements-slim.txt + fastapislim: pip install opentelemetry-api@{env:CORE_REPO}\#egg=opentelemetry-api&subdirectory=opentelemetry-api + fastapislim: pip install opentelemetry-semantic-conventions@{env:CORE_REPO}\#egg=opentelemetry-semantic-conventions&subdirectory=opentelemetry-semantic-conventions + fastapislim: pip install opentelemetry-sdk@{env:CORE_REPO}\#egg=opentelemetry-sdk&subdirectory=opentelemetry-sdk + fastapislim: pip install opentelemetry-test-utils@{env:CORE_REPO}\#egg=opentelemetry-test-utils&subdirectory=tests/opentelemetry-test-utils + fastapislim: pip install -r {toxinidir}/instrumentation/opentelemetry-instrumentation-fastapi/test-requirements-slim.txt mysql: pip install opentelemetry-api@{env:CORE_REPO}\#egg=opentelemetry-api&subdirectory=opentelemetry-api mysql: pip install opentelemetry-semantic-conventions@{env:CORE_REPO}\#egg=opentelemetry-semantic-conventions&subdirectory=opentelemetry-semantic-conventions