better replacement of original form KeyError

This commit is contained in:
David Lord 2022-03-23 08:25:58 -07:00
parent c9a1f7ad65
commit 0a300d007d
No known key found for this signature in database
GPG key ID: 7A1C87E3F5BC42A8
2 changed files with 10 additions and 6 deletions

View file

@ -71,21 +71,25 @@ class FormDataRoutingRedirect(AssertionError):
def attach_enctype_error_multidict(request):
"""Since Flask 0.8 we're monkeypatching the files object in case a
request is detected that does not use multipart form data but the files
object is accessed.
"""Patch ``request.files.__getitem__`` to raise a descriptive error
about ``enctype=multipart/form-data``.
:param request: The request to patch.
:meta private:
"""
oldcls = request.files.__class__
class newcls(oldcls):
def __getitem__(self, key):
try:
return oldcls.__getitem__(self, key)
return super().__getitem__(key)
except KeyError as e:
if key not in request.form:
raise
raise DebugFilesKeyError(request, key) from e
raise DebugFilesKeyError(request, key).with_traceback(
e.__traceback__
) from None
newcls.__name__ = oldcls.__name__
newcls.__module__ = oldcls.__module__

View file

@ -110,7 +110,7 @@ class Request(RequestBase):
return _split_blueprint_path(name)
def _load_form_data(self) -> None:
RequestBase._load_form_data(self)
super()._load_form_data()
# In debug mode we're replacing the files multidict with an ad-hoc
# subclass that raises a different error for key errors.