Merge "s3api: simplify BaseAclHandler.request_with"

This commit is contained in:
Zuul
2018-05-22 16:28:42 +00:00
committed by Gerrit Code Review

View File

@@ -58,7 +58,6 @@ from swift.common.middleware.s3api.etree import fromstring, XMLSyntaxError, \
DocumentInvalid DocumentInvalid
from swift.common.middleware.s3api.utils import MULTIUPLOAD_SUFFIX, \ from swift.common.middleware.s3api.utils import MULTIUPLOAD_SUFFIX, \
sysmeta_header sysmeta_header
from contextlib import contextmanager
def get_acl_handler(controller_name): def get_acl_handler(controller_name):
@@ -85,19 +84,18 @@ class BaseAclHandler(object):
self.headers = req.headers if headers is None else headers self.headers = req.headers if headers is None else headers
self.logger = logger self.logger = logger
@contextmanager
def request_with(self, container, obj, headers): def request_with(self, container, obj, headers):
yield type(self)(self.req, self.logger, return type(self)(self.req, self.logger,
container=container, obj=obj, headers=headers) container=container, obj=obj, headers=headers)
def handle_acl(self, app, method, container=None, obj=None, headers=None): def handle_acl(self, app, method, container=None, obj=None, headers=None):
method = method or self.method method = method or self.method
with self.request_with(container, obj, headers) as ah: ah = self.request_with(container, obj, headers)
if hasattr(ah, method): if hasattr(ah, method):
return getattr(ah, method)(app) return getattr(ah, method)(app)
else: else:
return ah._handle_acl(app, method) return ah._handle_acl(app, method)
def _handle_acl(self, app, sw_method, container=None, obj=None, def _handle_acl(self, app, sw_method, container=None, obj=None,
permission=None, headers=None): permission=None, headers=None):
@@ -332,12 +330,10 @@ class MultiUploadAclHandler(BaseAclHandler):
def handle_acl(self, app, method, container=None, obj=None, headers=None): def handle_acl(self, app, method, container=None, obj=None, headers=None):
method = method or self.method method = method or self.method
with self.request_with(container, obj, headers) as ah: ah = self.request_with(container, obj, headers)
# MultiUpload stuffs don't need acl check basically. # MultiUpload stuffs don't need acl check basically.
if hasattr(ah, method): if hasattr(ah, method):
return getattr(ah, method)(app) return getattr(ah, method)(app)
else:
pass
def HEAD(self, app): def HEAD(self, app):
# For _check_upload_info # For _check_upload_info