diff options
Diffstat (limited to 'swift/common/middleware/copy.py')
-rw-r--r-- | swift/common/middleware/copy.py | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/swift/common/middleware/copy.py b/swift/common/middleware/copy.py index 5265fe930..1422d6680 100644 --- a/swift/common/middleware/copy.py +++ b/swift/common/middleware/copy.py @@ -139,7 +139,7 @@ from swift.common import utils from swift.common.utils import get_logger, \ config_true_value, FileLikeIter, read_conf_dir, close_if_possible from swift.common.swob import Request, HTTPPreconditionFailed, \ - HTTPRequestEntityTooLarge, HTTPBadRequest + HTTPRequestEntityTooLarge, HTTPBadRequest, HTTPException from swift.common.http import HTTP_MULTIPLE_CHOICES, HTTP_CREATED, \ is_success, HTTP_OK from swift.common.constraints import check_account_format, MAX_FILE_SIZE @@ -323,16 +323,20 @@ class ServerSideCopyMiddleware(object): # the client actually sent. req.environ['swift.orig_req_method'] = req.method - if req.method == 'PUT' and req.headers.get('X-Copy-From'): - return self.handle_PUT(req, start_response) - elif req.method == 'COPY': - return self.handle_COPY(req, start_response) - elif req.method == 'POST' and self.object_post_as_copy: - return self.handle_object_post_as_copy(req, start_response) - elif req.method == 'OPTIONS': - # Does not interfere with OPTIONS response from (account,container) - # servers and /info response. - return self.handle_OPTIONS(req, start_response) + try: + if req.method == 'PUT' and req.headers.get('X-Copy-From'): + return self.handle_PUT(req, start_response) + elif req.method == 'COPY': + return self.handle_COPY(req, start_response) + elif req.method == 'POST' and self.object_post_as_copy: + return self.handle_object_post_as_copy(req, start_response) + elif req.method == 'OPTIONS': + # Does not interfere with OPTIONS response from + # (account,container) servers and /info response. + return self.handle_OPTIONS(req, start_response) + + except HTTPException as e: + return e(req.environ, start_response) return self.app(env, start_response) |