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

View file

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