From 0a300d007d3a5ef902e0b3c91f6189267fbed182 Mon Sep 17 00:00:00 2001 From: David Lord Date: Wed, 23 Mar 2022 08:25:58 -0700 Subject: [PATCH] better replacement of original form KeyError --- src/flask/debughelpers.py | 14 +++++++++----- src/flask/wrappers.py | 2 +- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/flask/debughelpers.py b/src/flask/debughelpers.py index 2d95d2e9..27d378c2 100644 --- a/src/flask/debughelpers.py +++ b/src/flask/debughelpers.py @@ -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__ diff --git a/src/flask/wrappers.py b/src/flask/wrappers.py index 47dbe5c8..2c873a37 100644 --- a/src/flask/wrappers.py +++ b/src/flask/wrappers.py @@ -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.