Skip to content

Commit 2af7311

Browse files
committed
instrumentation/fastapi: fix fastapi-slim support
In instrumentation_dependencies we need to use pkg_resources.get_distribution because find_spec("fastapi") will return something even with just fastapi-slim installed. Then need to fix the tox environment name otherwise all the fastapi dependencies will also be installed for fastapi-slim and tests would pass because they find fastapi installed.
1 parent c87ffd4 commit 2af7311

File tree

4 files changed

+19
-10
lines changed

4 files changed

+19
-10
lines changed

Diff for: .github/workflows/instrumentations_1.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ jobs:
3838
- "resource-detector-azure"
3939
- "resource-detector-container"
4040
- "util-http"
41-
- "fastapi-slim"
41+
- "fastapislim"
4242
- "processor-baggage"
4343
os: [ubuntu-20.04]
4444
exclude:

Diff for: CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1515
([#2746](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/2746))
1616
- `opentelemetry-instrumentation-grpc` Fixes the issue with the gRPC instrumentation not working with the 1.63.0 and higher version of gRPC
1717
([#2483](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/2484))
18+
- `opentelemetry-instrumentation-fastapi` Fix fastapi-slim support
19+
([#2756](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/2756))
1820

1921
## Version 1.26.0/0.47b0 (2024-07-23)
2022

Diff for: instrumentation/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/__init__.py

+9-2
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ def client_response_hook(span: Span, scope: dict[str, Any], message: dict[str, A
176176
from typing import Collection
177177

178178
import fastapi
179+
from pkg_resources import get_distribution
179180
from starlette.routing import Match
180181

181182
from opentelemetry.instrumentation._semconv import (
@@ -285,10 +286,16 @@ def uninstrument_app(app: fastapi.FastAPI):
285286
app._is_instrumented_by_opentelemetry = False
286287

287288
def instrumentation_dependencies(self) -> Collection[str]:
289+
# need to use get_distribution because find_spec("fastapi") will return
290+
# something even with just fastapi-slim installed
291+
try:
292+
get_distribution("fastapi-slim")
293+
return (_fastapi_slim,)
294+
except Exception: # pylint: disable=broad-exception-caught
295+
pass
296+
288297
if find_spec("fastapi") is not None:
289298
return (_fastapi,)
290-
if find_spec("fastapi_slim") is not None:
291-
return (_fastapi_slim,)
292299
# If neither is installed, return both as potential dependencies
293300
return _instruments
294301

Diff for: tox.ini

+7-7
Original file line numberDiff line numberDiff line change
@@ -116,9 +116,9 @@ envlist =
116116

117117
; opentelemetry-instrumentation-fastapi
118118
py3{8,9,10,11,12}-test-instrumentation-fastapi
119-
py3{8,9,10,11,12}-test-instrumentation-fastapi-slim
119+
py3{8,9,10,11,12}-test-instrumentation-fastapislim
120120
pypy3-test-instrumentation-fastapi
121-
pypy3-test-instrumentation-fastapi-slim
121+
pypy3-test-instrumentation-fastapislim
122122
lint-instrumentation-fastapi
123123

124124
; opentelemetry-instrumentation-flask
@@ -552,11 +552,11 @@ commands_pre =
552552
fastapi: pip install opentelemetry-sdk@{env:CORE_REPO}\#egg=opentelemetry-sdk&subdirectory=opentelemetry-sdk
553553
fastapi: pip install opentelemetry-test-utils@{env:CORE_REPO}\#egg=opentelemetry-test-utils&subdirectory=tests/opentelemetry-test-utils
554554
fastapi: pip install -r {toxinidir}/instrumentation/opentelemetry-instrumentation-fastapi/test-requirements.txt
555-
fastapi-slim: pip install opentelemetry-api@{env:CORE_REPO}\#egg=opentelemetry-api&subdirectory=opentelemetry-api
556-
fastapi-slim: pip install opentelemetry-semantic-conventions@{env:CORE_REPO}\#egg=opentelemetry-semantic-conventions&subdirectory=opentelemetry-semantic-conventions
557-
fastapi-slim: pip install opentelemetry-sdk@{env:CORE_REPO}\#egg=opentelemetry-sdk&subdirectory=opentelemetry-sdk
558-
fastapi-slim: pip install opentelemetry-test-utils@{env:CORE_REPO}\#egg=opentelemetry-test-utils&subdirectory=tests/opentelemetry-test-utils
559-
fastapi-slim: pip install -r {toxinidir}/instrumentation/opentelemetry-instrumentation-fastapi/test-requirements-slim.txt
555+
fastapislim: pip install opentelemetry-api@{env:CORE_REPO}\#egg=opentelemetry-api&subdirectory=opentelemetry-api
556+
fastapislim: pip install opentelemetry-semantic-conventions@{env:CORE_REPO}\#egg=opentelemetry-semantic-conventions&subdirectory=opentelemetry-semantic-conventions
557+
fastapislim: pip install opentelemetry-sdk@{env:CORE_REPO}\#egg=opentelemetry-sdk&subdirectory=opentelemetry-sdk
558+
fastapislim: pip install opentelemetry-test-utils@{env:CORE_REPO}\#egg=opentelemetry-test-utils&subdirectory=tests/opentelemetry-test-utils
559+
fastapislim: pip install -r {toxinidir}/instrumentation/opentelemetry-instrumentation-fastapi/test-requirements-slim.txt
560560

561561
mysql: pip install opentelemetry-api@{env:CORE_REPO}\#egg=opentelemetry-api&subdirectory=opentelemetry-api
562562
mysql: pip install opentelemetry-semantic-conventions@{env:CORE_REPO}\#egg=opentelemetry-semantic-conventions&subdirectory=opentelemetry-semantic-conventions

0 commit comments

Comments
 (0)