From 9ffaeb7eeaf2f173f0ad08cc7770a6a3c45534cb Mon Sep 17 00:00:00 2001 From: PakawiNz Date: Wed, 25 Sep 2024 23:30:15 +0700 Subject: [PATCH 1/3] allowing ASGI to use drf_request in DjangoRequestExtractor since we already have patched a request object (both ASGI/WSGI) before arriving, we should move patched-using logic closer to where it actually being used. for minimize impact and allow ASGI functionality. --- sentry_sdk/integrations/django/__init__.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/sentry_sdk/integrations/django/__init__.py b/sentry_sdk/integrations/django/__init__.py index 40d17b0507..a43792b853 100644 --- a/sentry_sdk/integrations/django/__init__.py +++ b/sentry_sdk/integrations/django/__init__.py @@ -491,13 +491,6 @@ def wsgi_request_event_processor(event, hint): # We have a `asgi_request_event_processor` for this. return event - try: - drf_request = request._sentry_drf_request_backref() - if drf_request is not None: - request = drf_request - except AttributeError: - pass - with capture_internal_exceptions(): DjangoRequestExtractor(request).extract_into_event(event) @@ -530,6 +523,15 @@ def _got_request_exception(request=None, **kwargs): class DjangoRequestExtractor(RequestExtractor): + def __init__(self, request): + try: + drf_request = request._sentry_drf_request_backref() + if drf_request is not None: + request = drf_request + except AttributeError: + pass + self.request = request + def env(self): # type: () -> Dict[str, str] return self.request.META From 72f4c94b77f839229c6c2d42146fb2f9fae70a29 Mon Sep 17 00:00:00 2001 From: Ivana Kellyer Date: Tue, 1 Oct 2024 11:25:48 +0200 Subject: [PATCH 2/3] fix whitespace --- sentry_sdk/integrations/django/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sentry_sdk/integrations/django/__init__.py b/sentry_sdk/integrations/django/__init__.py index a43792b853..4eed75bdb0 100644 --- a/sentry_sdk/integrations/django/__init__.py +++ b/sentry_sdk/integrations/django/__init__.py @@ -529,9 +529,9 @@ def __init__(self, request): if drf_request is not None: request = drf_request except AttributeError: - pass + pass self.request = request - + def env(self): # type: () -> Dict[str, str] return self.request.META From fdc0500f580d63e6209517c641f7a84e0638bb82 Mon Sep 17 00:00:00 2001 From: Ivana Kellyer Date: Tue, 1 Oct 2024 11:29:29 +0200 Subject: [PATCH 3/3] add annotation --- sentry_sdk/integrations/django/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/sentry_sdk/integrations/django/__init__.py b/sentry_sdk/integrations/django/__init__.py index 4eed75bdb0..7d33aad29c 100644 --- a/sentry_sdk/integrations/django/__init__.py +++ b/sentry_sdk/integrations/django/__init__.py @@ -524,6 +524,7 @@ def _got_request_exception(request=None, **kwargs): class DjangoRequestExtractor(RequestExtractor): def __init__(self, request): + # type: (Union[WSGIRequest, ASGIRequest]) -> None try: drf_request = request._sentry_drf_request_backref() if drf_request is not None: