feat(quart): Add span streaming support to Quart integration#6502
feat(quart): Add span streaming support to Quart integration#6502ericapisani wants to merge 3 commits into
Conversation
Add span streaming support for the Quart integration when the trace_lifecycle stream experiment is enabled. Sets HTTP request attributes (method, headers, URL, query, client IP) on the segment span and uses the correct source constant from sentry_sdk.traces for span-first mode. Depends on #6501 being merged first. Fixes PY-2352 Fixes #6050
Codecov Results 📊✅ 88506 passed | ⏭️ 6022 skipped | Total: 94528 | Pass Rate: 93.63% | Execution Time: 297m 57s 📊 Comparison with Base Branch
All tests are passing successfully. ✅ Patch coverage is 100.00%. Project has 2474 uncovered lines. Files with missing lines (1)
Coverage diff@@ Coverage Diff @@
## main #PR +/-##
==========================================
+ Coverage 89.37% 89.38% +0.01%
==========================================
Files 192 192 —
Lines 23285 23306 +21
Branches 8002 8016 +14
==========================================
+ Hits 20811 20832 +21
- Misses 2474 2474 —
- Partials 1309 1312 +3Generated by Codecov Action |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 44efa73. Configure here.
| current_scope = sentry_sdk.get_current_scope() | ||
| if current_scope.transaction is not None: | ||
| current_scope.transaction.update_active_thread() |
There was a problem hiding this comment.
We'll need a streaming counterpart for this piece of code, something like:
client = sentry_sdk.get_client()
if has_span_streaming_enabled(client.options):
span = get_current_span()
if span is not None:
span._segment._update_active_thread()| ) | ||
| segment.set_attribute( | ||
| "user.ip_address", request_websocket.access_route[0] | ||
| ) |
There was a problem hiding this comment.
We should also set user.id if we have it (essentially port _add_user_to_event).
It's one of the attributes that should be set on all spans, not just the segment, so it should be set on the scope.
Maybe extract the code that fetches the user id from _add_user_to_event to a helper func, get rid of _add_user_to_event and set the user id in the event processor directly, and in the streaming path set it on the current scope?
def _fetch_user_id() -> None:
if quart_auth is None:
return
user = quart_auth.current_user
if user is None:
return
try:
return quart_auth.current_user._auth_id
except Exception:
return Noneand then here
user_id = _fetch_user_id()
if user_id is not None:
sentry_sdk.get_current_scope().set_attribute("user.id", user_id)and in the event processor
user_id = _fetch_user_id()
if user_id is not None:
user_info = event.setdefault("user", {})
user_info["id"] = user_idThere was a problem hiding this comment.
Please also add a test for this if there is none.

Add span streaming support for the Quart integration when the
trace_lifecycle stream experiment is enabled. Sets HTTP request
attributes (method, headers, URL, query, client IP) on the segment
span and uses the correct source constant from sentry_sdk.traces
for span-first mode.
Depends on #6501
being merged first.
Fixes PY-2352
Fixes #6050