Fixes #22055: Report API exceptions to Monitoring Services (#22106)

Ensure CoreMiddleware emits Django's got_request_exception signal before
returning handled 500 responses for API requests and custom error templates.

This allows integrations such as Sentry to report exceptions that would
otherwise be hidden when middleware returns a custom error response.
This commit is contained in:
Arthur Hanson 2026-05-08 04:59:44 -07:00 committed by GitHub
parent 523ecba867
commit bf23a0b3fd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 7 additions and 0 deletions

View File

@ -5,6 +5,7 @@ from django.conf import settings
from django.contrib import auth, messages
from django.contrib.auth.middleware import RemoteUserMiddleware as RemoteUserMiddleware_
from django.core.exceptions import ImproperlyConfigured
from django.core.signals import got_request_exception
from django.db import ProgrammingError, connection
from django.db.utils import InternalError
from django.http import Http404, HttpResponseRedirect
@ -103,6 +104,9 @@ class CoreMiddleware:
# Cleanly handle exceptions that occur from REST API requests
if is_api_request(request):
# Fire Django's got_request_exception signal so error-tracking
# integrations (e.g. Sentry) capture the exception.
got_request_exception.send(sender=self.__class__, request=request)
return handle_rest_api_exception(request)
# Ignore Http404s (defer to Django's built-in 404 handling)
@ -120,6 +124,9 @@ class CoreMiddleware:
# Return a custom error message, or fall back to Django's default 500 error handling
if custom_template:
# Fire Django's got_request_exception signal so error-tracking
# integrations (e.g. Sentry) capture the exception.
got_request_exception.send(sender=self.__class__, request=request)
return handler_500(request, template_name=custom_template)
return None