fix: skip Content-Type gate when request is None (#2843)

Legacy-UI batch flows invoke route handlers internally with request=None,
which previously raised AttributeError on request.content_type.

Signed-off-by: SAY-5 <say.apm35@gmail.com>
This commit is contained in:
SAY-5 2026-05-02 15:17:34 -07:00
parent 8d5c12037f
commit 481c4b6772
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
Content-Type that must be rejected. None when the request is allowed
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:
return web.Response(
status=400,

View File

@ -116,6 +116,12 @@ class ContentTypeRejectionTest(unittest.TestCase):
r = self._post({"Content-Type": "application/json"})
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__":
unittest.main(verbosity=2)