Skip to content

Commit a07cb19

Browse files
authored
Merge branch 'master' into ivana/migrate-event-processors-in-span-first
2 parents b74cdf8 + 48dc566 commit a07cb19

2 files changed

Lines changed: 30 additions & 4 deletions

File tree

sentry_sdk/consts.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ class CompressionAlgo(Enum):
8484
"before_send_metric": Optional[Callable[[Metric, Hint], Optional[Metric]]],
8585
"trace_lifecycle": Optional[Literal["static", "stream"]],
8686
"ignore_spans": Optional[IgnoreSpansConfig],
87+
"suppress_asgi_chained_exceptions": Optional[bool],
8788
},
8889
total=False,
8990
)

sentry_sdk/integrations/asgi.py

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
Based on Tom Christie's `sentry-asgi <https://github.com/encode/sentry-asgi>`.
55
"""
66

7+
import sys
78
import asyncio
89
import inspect
910
from copy import deepcopy
@@ -38,6 +39,8 @@
3839
logger,
3940
transaction_from_function,
4041
_get_installed_modules,
42+
reraise,
43+
capture_internal_exceptions,
4144
)
4245

4346
from typing import TYPE_CHECKING
@@ -188,8 +191,19 @@ async def _run_app(
188191
return await self.app(scope, receive, send)
189192

190193
except Exception as exc:
191-
self._capture_lifespan_exception(exc)
192-
raise exc from None
194+
suppress_chained_exceptions = (
195+
sentry_sdk.get_client()
196+
.options.get("_experiments", {})
197+
.get("suppress_asgi_chained_exceptions", True)
198+
)
199+
if suppress_chained_exceptions:
200+
self._capture_lifespan_exception(exc)
201+
raise exc from None
202+
203+
exc_info = sys.exc_info()
204+
with capture_internal_exceptions():
205+
self._capture_lifespan_exception(exc)
206+
reraise(*exc_info)
193207

194208
client = sentry_sdk.get_client()
195209
span_streaming = has_span_streaming_enabled(client.options)
@@ -326,8 +340,19 @@ async def _sentry_wrapped_send(
326340
scope, receive, _sentry_wrapped_send
327341
)
328342
except Exception as exc:
329-
self._capture_request_exception(exc)
330-
raise exc from None
343+
suppress_chained_exceptions = (
344+
sentry_sdk.get_client()
345+
.options.get("_experiments", {})
346+
.get("suppress_asgi_chained_exceptions", True)
347+
)
348+
if suppress_chained_exceptions:
349+
self._capture_request_exception(exc)
350+
raise exc from None
351+
352+
exc_info = sys.exc_info()
353+
with capture_internal_exceptions():
354+
self._capture_request_exception(exc)
355+
reraise(*exc_info)
331356
finally:
332357
_asgi_middleware_applied.set(False)
333358

0 commit comments

Comments
 (0)