diff --git a/CHANGELOG.md b/CHANGELOG.md index 64da93791c..7cfeefea9f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ([#4427](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/4427)) - `opentelemetry-instrumentation-flask`: Clean up environ keys in `_teardown_request` to prevent duplicate execution ([#4341](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/4341)) +- `opentelemetry-instrumentation-flask`: Stop reading the deprecated (from 3.1) `flask.__version__` attribute; resolve the Flask version via `importlib.metadata` + ([#4422](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/4422)) ### Breaking changes diff --git a/instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation/flask/__init__.py b/instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation/flask/__init__.py index 9e7d2e18d6..02c6ea693f 100644 --- a/instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation/flask/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation/flask/__init__.py @@ -301,10 +301,6 @@ def response_hook(span: Span, status: str, response_headers: List): ) _logger = getLogger(__name__) -# Global constants for Flask 3.1+ streaming context cleanup -_IS_FLASK_31_PLUS = hasattr(flask, "__version__") and package_version.parse( - flask.__version__ -) >= package_version.parse("3.1.0") _ENVIRON_STARTTIME_KEY = "opentelemetry-flask.starttime_key" _ENVIRON_SPAN_KEY = "opentelemetry-flask.span_key" @@ -316,6 +312,11 @@ def response_hook(span: Span, status: str, response_headers: List): flask_version = version("flask") +# Global constant for Flask 3.1+ streaming context cleanup +_IS_FLASK_31_PLUS = package_version.parse( + flask_version +) >= package_version.parse("3.1.0") + if package_version.parse(flask_version) >= package_version.parse("2.2.0"): def _request_ctx_ref() -> weakref.ReferenceType: diff --git a/instrumentation/opentelemetry-instrumentation-flask/tests/test_flask_compatibility.py b/instrumentation/opentelemetry-instrumentation-flask/tests/test_flask_compatibility.py index f5a45af529..706f2b6660 100644 --- a/instrumentation/opentelemetry-instrumentation-flask/tests/test_flask_compatibility.py +++ b/instrumentation/opentelemetry-instrumentation-flask/tests/test_flask_compatibility.py @@ -20,6 +20,7 @@ import io import threading import time +from importlib.metadata import version from unittest import mock, skipIf import flask @@ -37,7 +38,7 @@ class TestFlaskCompatibility(WsgiTestBase): def setUp(self): super().setUp() - self.flask_version = flask.__version__ + self.flask_version = version("flask") def test_streaming_response_context_cleanup(self): """Test that streaming responses properly clean up context"""