Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Bump `pylint` to `4.0.5`
([#4244](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/4244))

### Fixed

- `opentelemetry-instrumentation-flask`: Stop reading the deprecated `flask.__version__` attribute; resolve the Flask version via `importlib.metadata` only so import no longer emits a `DeprecationWarning` under Flask 3.1+
([#4422](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/4422))

### Breaking changes

- Drop Python 3.9 support
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -314,8 +310,16 @@ def response_hook(span: Span, status: str, response_headers: List):

_excluded_urls_from_env = get_excluded_urls("FLASK")

# Use importlib.metadata rather than flask.__version__: the latter has been
# deprecated in Flask 3.1 and emits a DeprecationWarning on import; it is
# scheduled for removal in Flask 3.2.
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:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import io
import threading
import time
from importlib.metadata import version
from unittest import mock, skipIf

import flask
Expand All @@ -35,7 +36,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"""
Expand Down
Loading