instrumentation/fastapi: fix fastapi-slim support (#2756)

This commit is contained in:
Riccardo Magliocchetti 2024-08-01 20:56:41 +02:00 committed by GitHub
parent dab664c06e
commit 32e6f6da92
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 24 additions and 12 deletions

View File

@ -38,7 +38,7 @@ jobs:
- "resource-detector-azure" - "resource-detector-azure"
- "resource-detector-container" - "resource-detector-container"
- "util-http" - "util-http"
- "fastapi-slim" - "fastapislim"
- "processor-baggage" - "processor-baggage"
os: [ubuntu-20.04] os: [ubuntu-20.04]
exclude: exclude:

View File

@ -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)) ([#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 - `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)) ([#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) ## Version 1.26.0/0.47b0 (2024-07-23)

View File

@ -172,7 +172,7 @@ API
--- ---
""" """
import logging import logging
from importlib.util import find_spec from importlib.metadata import PackageNotFoundError, distribution
from typing import Collection from typing import Collection
import fastapi import fastapi
@ -285,10 +285,20 @@ class FastAPIInstrumentor(BaseInstrumentor):
app._is_instrumented_by_opentelemetry = False app._is_instrumented_by_opentelemetry = False
def instrumentation_dependencies(self) -> Collection[str]: def instrumentation_dependencies(self) -> Collection[str]:
if find_spec("fastapi") is not None: # need to use distribution because find_spec("fastapi") will return
return (_fastapi,) # something even with just fastapi-slim installed
if find_spec("fastapi_slim") is not None: try:
distribution("fastapi-slim")
return (_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 # If neither is installed, return both as potential dependencies
return _instruments return _instruments

14
tox.ini
View File

@ -116,9 +116,9 @@ envlist =
; opentelemetry-instrumentation-fastapi ; opentelemetry-instrumentation-fastapi
py3{8,9,10,11,12}-test-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
pypy3-test-instrumentation-fastapi-slim pypy3-test-instrumentation-fastapislim
lint-instrumentation-fastapi lint-instrumentation-fastapi
; opentelemetry-instrumentation-flask ; 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-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 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: 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 fastapislim: 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 fastapislim: 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 fastapislim: 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 fastapislim: 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 -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-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 mysql: pip install opentelemetry-semantic-conventions@{env:CORE_REPO}\#egg=opentelemetry-semantic-conventions&subdirectory=opentelemetry-semantic-conventions