From 404edeb7fa68730fd95682cb96e0f39ee51051d0 Mon Sep 17 00:00:00 2001 From: nathang15 Date: Mon, 25 Nov 2024 18:28:17 -0500 Subject: [PATCH] Refactor FormPost to use WSGIContext ... instead of self-handling subrequests manually. Closes-Bug: #1523401 Change-Id: I85b5302c2416de1793599385b791fcd3ec3b4da0 --- swift/common/middleware/formpost.py | 23 ++++++----------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/swift/common/middleware/formpost.py b/swift/common/middleware/formpost.py index 383eed9fbe..45b5800956 100644 --- a/swift/common/middleware/formpost.py +++ b/swift/common/middleware/formpost.py @@ -138,7 +138,7 @@ from swift.common.utils import streq_const_time, parse_content_disposition, \ parse_mime_headers, iter_multipart_mime_documents, reiterate, \ closing_if_possible, get_logger from swift.common.registry import register_swift_info -from swift.common.wsgi import make_pre_authed_env +from swift.common.wsgi import WSGIContext, make_pre_authed_env from swift.common.swob import HTTPUnauthorized, wsgi_to_str, str_to_wsgi from swift.common.http import is_success from swift.proxy.controllers.base import get_account_info, get_container_info @@ -438,25 +438,14 @@ class FormPost(object): if not has_valid_sig: raise FormUnauthorized('invalid signature') self.logger.increment('formpost.digests.%s' % hash_name) - - substatus = [None] - subheaders = [None] - + wsgi_ctx = WSGIContext(self.app) wsgi_input = subenv['wsgi.input'] - - def _start_response(status, headers, exc_info=None): - if wsgi_input.file_size_exceeded: - raise EOFError("max_file_size exceeded") - - substatus[0] = status - subheaders[0] = headers - - # reiterate to ensure the response started, - # but drop any data on the floor - resp = self.app(subenv, _start_response) + resp = wsgi_ctx._app_call(subenv) + if wsgi_input.file_size_exceeded: + raise EOFError("max_file_size exceeded") with closing_if_possible(reiterate(resp)): body = b''.join(resp) - return substatus[0], subheaders[0], body + return wsgi_ctx._response_status, wsgi_ctx._response_headers, body def _get_keys(self, env): """