summaryrefslogtreecommitdiff
path: root/swift/common/middleware/copy.py
diff options
context:
space:
mode:
Diffstat (limited to 'swift/common/middleware/copy.py')
-rw-r--r--swift/common/middleware/copy.py26
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)