From 65ee9eb3bcb9a0d6e313af7182f03fe4e81bef0e Mon Sep 17 00:00:00 2001 From: Alexander Alderman Webb Date: Fri, 12 Jun 2026 10:02:50 +0200 Subject: [PATCH 1/6] feat(falcon): Set name and source on request span when streaming From 555beb89ebd4cc08048dbc5b5913227a3bc73128 Mon Sep 17 00:00:00 2001 From: Alexander Alderman Webb Date: Fri, 12 Jun 2026 10:13:15 +0200 Subject: [PATCH 2/6] . --- sentry_sdk/integrations/falcon.py | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/sentry_sdk/integrations/falcon.py b/sentry_sdk/integrations/falcon.py index 00a53c9236..5d292a43b9 100644 --- a/sentry_sdk/integrations/falcon.py +++ b/sentry_sdk/integrations/falcon.py @@ -104,6 +104,22 @@ def process_request( scope._name = "falcon" scope.add_event_processor(_make_request_event_processor(req, integration)) + def process_resource( + self, req: "Any", resp: "Any", resource: "Any", params: "Any" + ) -> None: + integration = sentry_sdk.get_client().get_integration(FalconIntegration) + if integration is None: + return + + name_for_style = { + "uri_template": req.uri_template, + "path": req.path, + } + name = name_for_style[integration.transaction_style] + source = SOURCE_FOR_STYLE[integration.transaction_style] + sentry_sdk.set_transaction_name(name, source) + sentry_sdk.get_isolation_scope().set_transaction_name(name, source) + TRANSACTION_STYLE_VALUES = ("uri_template", "path") @@ -233,23 +249,10 @@ def _has_http_5xx_status(response: "falcon.Response") -> bool: return response.status.startswith("5") -def _set_transaction_name_and_source( - event: "Event", transaction_style: str, request: "falcon.Request" -) -> None: - name_for_style = { - "uri_template": request.uri_template, - "path": request.path, - } - event["transaction"] = name_for_style[transaction_style] - event["transaction_info"] = {"source": SOURCE_FOR_STYLE[transaction_style]} - - def _make_request_event_processor( req: "falcon.Request", integration: "FalconIntegration" ) -> "EventProcessor": def event_processor(event: "Event", hint: "dict[str, Any]") -> "Event": - _set_transaction_name_and_source(event, integration.transaction_style, req) - with capture_internal_exceptions(): FalconRequestExtractor(req).extract_into_event(event) From 26b838271ac0d4fe913f3664058057ed8c8aacda Mon Sep 17 00:00:00 2001 From: Alexander Alderman Webb Date: Fri, 12 Jun 2026 10:14:34 +0200 Subject: [PATCH 3/6] . --- tests/integrations/falcon/test_falcon.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/integrations/falcon/test_falcon.py b/tests/integrations/falcon/test_falcon.py index 75ad903a04..962a3ede90 100644 --- a/tests/integrations/falcon/test_falcon.py +++ b/tests/integrations/falcon/test_falcon.py @@ -121,17 +121,26 @@ def test_transaction_style( integration = FalconIntegration(transaction_style=transaction_style) sentry_init( integrations=[integration], + traces_sample_rate=1.0, _experiments={"trace_lifecycle": "stream" if span_streaming else "static"}, ) client = make_client() if span_streaming: items = capture_items("event") + items = capture_items("event", "span") response = client.simulate_get(url) assert response.status == falcon.HTTP_200 (event,) = (item.payload for item in items) + (event,) = (item.payload for item in items if item.type == "event") + + sentry_sdk.flush() + spans = [item.payload for item in items if item.type == "span"] + spans = [span for span in spans if span["name"] == expected_transaction] + assert len(spans) == 1 + assert spans[0]["attributes"]["sentry.span.source"] == expected_source else: events = capture_events() @@ -139,6 +148,11 @@ def test_transaction_style( assert response.status == falcon.HTTP_200 (event,) = events + (event, transaction) = events + + assert transaction["transaction"] == expected_transaction + assert transaction["transaction_info"] == {"source": expected_source} + assert event["transaction"] == expected_transaction assert event["transaction_info"] == {"source": expected_source} From 0c1790467af998148e15774649ca95c86d9d531f Mon Sep 17 00:00:00 2001 From: Alexander Alderman Webb Date: Fri, 12 Jun 2026 10:16:58 +0200 Subject: [PATCH 4/6] . --- tests/integrations/falcon/test_falcon.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/integrations/falcon/test_falcon.py b/tests/integrations/falcon/test_falcon.py index 962a3ede90..31c5f5d8b4 100644 --- a/tests/integrations/falcon/test_falcon.py +++ b/tests/integrations/falcon/test_falcon.py @@ -133,7 +133,6 @@ def test_transaction_style( response = client.simulate_get(url) assert response.status == falcon.HTTP_200 - (event,) = (item.payload for item in items) (event,) = (item.payload for item in items if item.type == "event") sentry_sdk.flush() @@ -147,7 +146,6 @@ def test_transaction_style( response = client.simulate_get(url) assert response.status == falcon.HTTP_200 - (event,) = events (event, transaction) = events assert transaction["transaction"] == expected_transaction From 1ebe052aa484fe639efe2f8500b921f8aa142168 Mon Sep 17 00:00:00 2001 From: Alexander Alderman Webb Date: Fri, 12 Jun 2026 10:29:48 +0200 Subject: [PATCH 5/6] restore event processor --- sentry_sdk/integrations/falcon.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/sentry_sdk/integrations/falcon.py b/sentry_sdk/integrations/falcon.py index 5d292a43b9..6c7ef17463 100644 --- a/sentry_sdk/integrations/falcon.py +++ b/sentry_sdk/integrations/falcon.py @@ -118,7 +118,6 @@ def process_resource( name = name_for_style[integration.transaction_style] source = SOURCE_FOR_STYLE[integration.transaction_style] sentry_sdk.set_transaction_name(name, source) - sentry_sdk.get_isolation_scope().set_transaction_name(name, source) TRANSACTION_STYLE_VALUES = ("uri_template", "path") @@ -249,11 +248,24 @@ def _has_http_5xx_status(response: "falcon.Response") -> bool: return response.status.startswith("5") +def _set_transaction_name_and_source( + event: "Event", transaction_style: str, request: "falcon.Request" +) -> None: + name_for_style = { + "uri_template": request.uri_template, + "path": request.path, + } + event["transaction"] = name_for_style[transaction_style] + event["transaction_info"] = {"source": SOURCE_FOR_STYLE[transaction_style]} + + def _make_request_event_processor( req: "falcon.Request", integration: "FalconIntegration" ) -> "EventProcessor": def event_processor(event: "Event", hint: "dict[str, Any]") -> "Event": with capture_internal_exceptions(): + _set_transaction_name_and_source(event, integration.transaction_style, req) + FalconRequestExtractor(req).extract_into_event(event) return event From 4cbab21fbed21cd6c5ae604a7f6389a0394f9e89 Mon Sep 17 00:00:00 2001 From: Alexander Alderman Webb Date: Fri, 12 Jun 2026 10:30:20 +0200 Subject: [PATCH 6/6] . --- sentry_sdk/integrations/falcon.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sentry_sdk/integrations/falcon.py b/sentry_sdk/integrations/falcon.py index 6c7ef17463..b00de63cda 100644 --- a/sentry_sdk/integrations/falcon.py +++ b/sentry_sdk/integrations/falcon.py @@ -263,9 +263,9 @@ def _make_request_event_processor( req: "falcon.Request", integration: "FalconIntegration" ) -> "EventProcessor": def event_processor(event: "Event", hint: "dict[str, Any]") -> "Event": - with capture_internal_exceptions(): - _set_transaction_name_and_source(event, integration.transaction_style, req) + _set_transaction_name_and_source(event, integration.transaction_style, req) + with capture_internal_exceptions(): FalconRequestExtractor(req).extract_into_event(event) return event