better replacement of original form KeyError
This commit is contained in:
parent
c9a1f7ad65
commit
0a300d007d
2 changed files with 10 additions and 6 deletions
|
|
@ -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__
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue