This commit is contained in:
Sai Asish Y 2026-05-08 15:21:21 +02:00 committed by GitHub
commit 5513dc0a9c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 11 additions and 1 deletions

View File

@ -353,8 +353,12 @@ def _reject_simple_form_content_type(request):
web.Response(status=400) when the request has a simple-form web.Response(status=400) when the request has a simple-form
Content-Type that must be rejected. None when the request is allowed Content-Type that must be rejected. None when the request is allowed
to proceed (no Content-Type, application/json, or any non-simple to proceed (no Content-Type, application/json, or any non-simple
Content-Type). Content-Type, or no request object internal caller).
""" """
# Internal callers (e.g. legacy-UI batch flows) invoke route handlers
# directly with request=None; there is no Content-Type to gate.
if request is None:
return None
if request.content_type in _SIMPLE_FORM_CONTENT_TYPES: if request.content_type in _SIMPLE_FORM_CONTENT_TYPES:
return web.Response( return web.Response(
status=400, status=400,

View File

@ -116,6 +116,12 @@ class ContentTypeRejectionTest(unittest.TestCase):
r = self._post({"Content-Type": "application/json"}) r = self._post({"Content-Type": "application/json"})
self.assertEqual(r.status, 200) self.assertEqual(r.status, 200)
def test_none_request_allowed(self):
# Internal callers (e.g. legacy-UI batch flows) invoke route handlers
# directly with request=None; helper must not raise AttributeError.
# Regression test for issue #2843.
self.assertIsNone(_reject_simple_form_content_type(None))
if __name__ == "__main__": if __name__ == "__main__":
unittest.main(verbosity=2) unittest.main(verbosity=2)