From fbfe11e8d1c084fd1a7cfc7cf1a3064554d155ef Mon Sep 17 00:00:00 2001 From: Alexander Alderman Webb Date: Thu, 1 Oct 2026 13:41:26 +0200 Subject: [PATCH 1/2] ref(flask): Remove transaction_style parameter --- sentry_sdk/integrations/flask.py | 39 ++++++-------------------- tests/integrations/flask/test_flask.py | 31 +++++++++----------- 2 files changed, 21 insertions(+), 49 deletions(-) diff --git a/sentry_sdk/integrations/flask.py b/sentry_sdk/integrations/flask.py index bff656bbb8..e671afb5d5 100644 --- a/sentry_sdk/integrations/flask.py +++ b/sentry_sdk/integrations/flask.py @@ -9,7 +9,7 @@ ) from sentry_sdk.integrations.wsgi import SentryWsgiMiddleware from sentry_sdk.scope import should_send_default_pii -from sentry_sdk.traces import SOURCE_FOR_STYLE +from sentry_sdk.traces import SegmentNameSource from sentry_sdk.utils import ( capture_internal_exceptions, ensure_integration_enabled, @@ -49,26 +49,15 @@ except ImportError: raise DidNotEnable("blinker is not installed or incompatible") -TRANSACTION_STYLE_VALUES = ("endpoint", "url") - class FlaskIntegration(Integration): identifier = "flask" origin = f"auto.http.{identifier}" - transaction_style = "" - def __init__( self, - transaction_style: str = "endpoint", http_methods_to_capture: "tuple[str, ...]" = DEFAULT_HTTP_METHODS_TO_CAPTURE, ) -> None: - if transaction_style not in TRANSACTION_STYLE_VALUES: - raise ValueError( - "Invalid value for transaction_style: %s (must be in %s)" - % (transaction_style, TRANSACTION_STYLE_VALUES) - ) - self.transaction_style = transaction_style self.http_methods_to_capture = tuple(map(str.upper, http_methods_to_capture)) @staticmethod @@ -127,22 +116,6 @@ def _add_sentry_trace( context["sentry_trace_meta"] = trace_meta -def _set_transaction_name_and_source( - scope: "sentry_sdk.Scope", transaction_style: str, request: "Request" -) -> None: - try: - name_for_style = { - "url": request.url_rule.rule, - "endpoint": request.url_rule.endpoint, - } - scope.set_transaction_name( - name_for_style[transaction_style], - source=SOURCE_FOR_STYLE[transaction_style], - ) - except Exception: - pass - - def _request_started(app: "Flask", **kwargs: "Any") -> None: client = sentry_sdk.get_client() integration = client.get_integration(FlaskIntegration) @@ -163,9 +136,13 @@ def _request_started(app: "Flask", **kwargs: "Any") -> None: # Set the transaction name and source here, # but rely on WSGI middleware to actually start the transaction - _set_transaction_name_and_source( - sentry_sdk.get_current_scope(), integration.transaction_style, request - ) + try: + sentry_sdk.get_current_scope().set_transaction_name( + request.url_rule.rule, + source=SegmentNameSource.ROUTE, + ) + except Exception: + pass scope = sentry_sdk.get_isolation_scope() diff --git a/tests/integrations/flask/test_flask.py b/tests/integrations/flask/test_flask.py index da18734743..ca10e32764 100644 --- a/tests/integrations/flask/test_flask.py +++ b/tests/integrations/flask/test_flask.py @@ -85,34 +85,29 @@ def test_has_context(sentry_init, app, capture_events): assert response.status_code == 200 (event,) = events - assert event["transaction"] == "hi" + assert event["transaction"] == "/message" assert "data" not in event["request"] assert event["request"]["url"] == "http://localhost/message" @pytest.mark.parametrize( - "url,transaction_style,expected_transaction,expected_source", + "url,expected_transaction,expected_source", [ - ("/message", "endpoint", "hi", "component"), - ("/message", "url", "/message", "route"), - ("/message/123456", "endpoint", "hi_with_id", "component"), - ("/message/123456", "url", "/message/", "route"), + ("/message", "/message", "route"), + ("/message/123456", "/message/", "route"), ], ) -def test_transaction_or_segment_style( +def test_segment_name_and_source( sentry_init, app, capture_events, capture_items, url, - transaction_style, expected_transaction, expected_source, ): sentry_init( - integrations=[ - flask_sentry.FlaskIntegration(transaction_style=transaction_style) - ], + integrations=[flask_sentry.FlaskIntegration()], traces_sample_rate=1.0, ) @@ -282,7 +277,7 @@ def login(): sentry_sdk.flush() spans = [i.payload for i in items if i.type == "span"] - segment = next(s for s in spans if s["name"] == "hi") + segment = next(s for s in spans if s["name"] == "/message") if send_default_pii and user_id is not None: assert segment["attributes"]["user.id"] == str(user_id) @@ -812,12 +807,12 @@ def hi_tx(): (segment,) = spans (message_event,) = message_events - assert segment["name"] == "hi_tx" + assert segment["name"] == "/message_tx" assert segment["status"] == SpanStatus.OK assert segment["attributes"]["sentry.origin"] == "auto.http.flask" assert message_event["message"] == "hi" - assert message_event["transaction"] == "hi_tx" + assert message_event["transaction"] == "/message_tx" assert message_event["tags"]["view"] == "yes" assert message_event["tags"]["before_request"] == "yes" @@ -850,10 +845,10 @@ def error(): (segment,) = spans (error_event,) = error_events - assert segment["name"] == "error" + assert segment["name"] == "/error" assert segment["status"] == SpanStatus.ERROR - assert error_event["transaction"] == "error" + assert error_event["transaction"] == "/error" (exception,) = error_event["exception"]["values"] assert exception["type"] == "ZeroDivisionError" @@ -896,7 +891,7 @@ def dispatch_request(self): (event,) = events assert event["message"] == "hi" - assert event["transaction"] == "hello_class" + assert event["transaction"] == "/hello-class/" @pytest.mark.parametrize( @@ -1409,7 +1404,7 @@ def login(): sentry_sdk.flush() spans = [item.payload for item in items] - segment = next(s for s in spans if s["name"] == "hi") + segment = next(s for s in spans if s["name"] == "/message") if expect_user: assert segment["attributes"]["user.id"] == "42" From 6f5810724eb95fb6352e5282a0e95d535cca7d1a Mon Sep 17 00:00:00 2001 From: Alexander Alderman Webb Date: Thu, 1 Oct 2026 13:47:26 +0200 Subject: [PATCH 2/2] strawberry test --- tests/integrations/strawberry/test_strawberry.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/tests/integrations/strawberry/test_strawberry.py b/tests/integrations/strawberry/test_strawberry.py index 0d0057ebe6..ccd7dfb0d7 100644 --- a/tests/integrations/strawberry/test_strawberry.py +++ b/tests/integrations/strawberry/test_strawberry.py @@ -722,10 +722,7 @@ def test_segment_no_operation_name( parse_span, validate_span, resolve_span, query_span, segment = spans assert segment["is_segment"] is True - if async_execution: - assert segment["name"] == "/graphql" - else: - assert segment["name"] == "graphql_view" + assert segment["name"] == "/graphql" assert query_span["attributes"]["sentry.op"] == OP.GRAPHQL_QUERY assert query_span["name"] == "query"