2424 SOURCE_FOR_STYLE ,
2525 TransactionSource ,
2626)
27+ from sentry_sdk .tracing_utils import has_span_streaming_enabled
2728from sentry_sdk .utils import (
2829 AnnotatedValue ,
2930 capture_internal_exceptions ,
@@ -147,10 +148,13 @@ async def _create_span_call(
147148 send : "Callable[[Dict[str, Any]], Awaitable[None]]" ,
148149 ** kwargs : "Any" ,
149150 ) -> None :
150- integration = sentry_sdk .get_client ().get_integration (StarletteIntegration )
151+ client = sentry_sdk .get_client ()
152+ integration = client .get_integration (StarletteIntegration )
151153 if integration is None :
152154 return await old_call (app , scope , receive , send , ** kwargs )
153155
156+ span_streaming = has_span_streaming_enabled (client .options )
157+
154158 # Update transaction name with middleware name
155159 name , source = _get_transaction_from_middleware (app , scope , integration )
156160
@@ -165,21 +169,45 @@ async def _create_span_call(
165169
166170 middleware_name = app .__class__ .__name__
167171
168- with sentry_sdk .start_span (
169- op = OP .MIDDLEWARE_STARLETTE ,
170- name = middleware_name ,
171- origin = StarletteIntegration .origin ,
172- ) as middleware_span :
173- middleware_span .set_tag ("starlette.middleware_name" , middleware_name )
172+ if span_streaming :
173+ span_ctx = sentry_sdk .traces .start_span (name = middleware_name )
174+ else :
175+ span_ctx = sentry_sdk .start_span (
176+ op = OP .MIDDLEWARE_STARLETTE ,
177+ name = middleware_name ,
178+ origin = StarletteIntegration .origin ,
179+ )
180+
181+ with span_ctx as middleware_span :
182+ if span_streaming :
183+ middleware_span .set_op (OP .MIDDLEWARE_STARLETTE )
184+ middleware_span .set_origin (StarletteIntegration .origin )
185+ middleware_span .set_attribute (
186+ "starlette.middleware_name" , middleware_name
187+ )
188+ else :
189+ middleware_span .set_tag ("starlette.middleware_name" , middleware_name )
174190
175191 # Creating spans for the "receive" callback
176192 async def _sentry_receive (* args : "Any" , ** kwargs : "Any" ) -> "Any" :
177- with sentry_sdk .start_span (
178- op = OP .MIDDLEWARE_STARLETTE_RECEIVE ,
179- name = getattr (receive , "__qualname__" , str (receive )),
180- origin = StarletteIntegration .origin ,
181- ) as span :
182- span .set_tag ("starlette.middleware_name" , middleware_name )
193+ if span_streaming :
194+ span_ctx = sentry_sdk .tracing .start_span (
195+ name = getattr (receive , "__qualname__" , str (receive )),
196+ )
197+ else :
198+ span_ctx = sentry_sdk .start_span (
199+ op = OP .MIDDLEWARE_STARLETTE_RECEIVE ,
200+ name = getattr (receive , "__qualname__" , str (receive )),
201+ origin = StarletteIntegration .origin ,
202+ )
203+
204+ with span_ctx as span :
205+ if span_streaming :
206+ span .set_origin (StarletteIntegration .origin )
207+ span .set_op (OP .MIDDLEWARE_STARLETTE_RECEIVE )
208+ span .set_attribute ("starlette.middleware_name" , middleware_name )
209+ else :
210+ span .set_tag ("starlette.middleware_name" , middleware_name )
183211 return await receive (* args , ** kwargs )
184212
185213 receive_name = getattr (receive , "__name__" , str (receive ))
@@ -188,12 +216,25 @@ async def _sentry_receive(*args: "Any", **kwargs: "Any") -> "Any":
188216
189217 # Creating spans for the "send" callback
190218 async def _sentry_send (* args : "Any" , ** kwargs : "Any" ) -> "Any" :
191- with sentry_sdk .start_span (
192- op = OP .MIDDLEWARE_STARLETTE_SEND ,
193- name = getattr (send , "__qualname__" , str (send )),
194- origin = StarletteIntegration .origin ,
195- ) as span :
196- span .set_tag ("starlette.middleware_name" , middleware_name )
219+ if span_streaming :
220+ span_ctx = sentry_sdk .tracing .start_span (
221+ name = getattr (send , "__qualname__" , str (send )),
222+ )
223+ else :
224+ span_ctx = sentry_sdk .start_span (
225+ op = OP .MIDDLEWARE_STARLETTE_SEND ,
226+ name = getattr (send , "__qualname__" , str (send )),
227+ origin = StarletteIntegration .origin ,
228+ )
229+
230+ with span_ctx as span :
231+ if span_streaming :
232+ span .set_op (OP .MIDDLEWARE_STARLETTE_SEND )
233+ span .set_origin (StarletteIntegration .origin )
234+ span .set_attribute ("starlette.middleware_name" , middleware_name )
235+ else :
236+ span .set_tag ("starlette.middleware_name" , middleware_name )
237+
197238 return await send (* args , ** kwargs )
198239
199240 send_name = getattr (send , "__name__" , str (send ))
0 commit comments