Fix issues around S3 deletion. Closes #606.
This commit is contained in:
parent
5415091d14
commit
bd7327fca2
@ -477,7 +477,12 @@ class S3Backend(BaseBackend):
|
|||||||
def delete_key(self, bucket_name, key_name):
|
def delete_key(self, bucket_name, key_name):
|
||||||
key_name = clean_key_name(key_name)
|
key_name = clean_key_name(key_name)
|
||||||
bucket = self.get_bucket(bucket_name)
|
bucket = self.get_bucket(bucket_name)
|
||||||
return bucket.keys.pop(key_name)
|
|
||||||
|
try:
|
||||||
|
bucket.keys.pop(key_name)
|
||||||
|
return True
|
||||||
|
except KeyError:
|
||||||
|
return False
|
||||||
|
|
||||||
def copy_key(self, src_bucket_name, src_key_name, dest_bucket_name,
|
def copy_key(self, src_bucket_name, src_key_name, dest_bucket_name,
|
||||||
dest_key_name, storage=None, acl=None, src_version_id=None):
|
dest_key_name, storage=None, acl=None, src_version_id=None):
|
||||||
|
@ -305,11 +305,11 @@ class ResponseObject(_TemplateEnvironmentMixin):
|
|||||||
error_names = []
|
error_names = []
|
||||||
|
|
||||||
for k in keys:
|
for k in keys:
|
||||||
try:
|
key_name = k.firstChild.nodeValue
|
||||||
key_name = k.firstChild.nodeValue
|
success = self.backend.delete_key(bucket_name, key_name)
|
||||||
self.backend.delete_key(bucket_name, key_name)
|
if success:
|
||||||
deleted_names.append(key_name)
|
deleted_names.append(key_name)
|
||||||
except KeyError:
|
else:
|
||||||
error_names.append(key_name)
|
error_names.append(key_name)
|
||||||
|
|
||||||
return 200, headers, template.render(deleted=deleted_names, delete_errors=error_names)
|
return 200, headers, template.render(deleted=deleted_names, delete_errors=error_names)
|
||||||
@ -520,12 +520,9 @@ class ResponseObject(_TemplateEnvironmentMixin):
|
|||||||
upload_id = query['uploadId'][0]
|
upload_id = query['uploadId'][0]
|
||||||
self.backend.cancel_multipart(bucket_name, upload_id)
|
self.backend.cancel_multipart(bucket_name, upload_id)
|
||||||
return 204, headers, ""
|
return 204, headers, ""
|
||||||
try:
|
self.backend.delete_key(bucket_name, key_name)
|
||||||
removed_key = self.backend.delete_key(bucket_name, key_name)
|
|
||||||
except KeyError:
|
|
||||||
return 404, headers, ""
|
|
||||||
template = self.response_template(S3_DELETE_OBJECT_SUCCESS)
|
template = self.response_template(S3_DELETE_OBJECT_SUCCESS)
|
||||||
return 204, headers, template.render(bucket=removed_key)
|
return 204, headers, template.render()
|
||||||
|
|
||||||
def _complete_multipart_body(self, body):
|
def _complete_multipart_body(self, body):
|
||||||
ps = minidom.parseString(body).getElementsByTagName('Part')
|
ps = minidom.parseString(body).getElementsByTagName('Part')
|
||||||
|
@ -501,7 +501,8 @@ def test_delete_missing_key():
|
|||||||
conn = boto.connect_s3('the_key', 'the_secret')
|
conn = boto.connect_s3('the_key', 'the_secret')
|
||||||
bucket = conn.create_bucket('foobar')
|
bucket = conn.create_bucket('foobar')
|
||||||
|
|
||||||
bucket.delete_key.when.called_with('foobar').should.throw(S3ResponseError)
|
deleted_key = bucket.delete_key("foobar")
|
||||||
|
deleted_key.key.should.equal("foobar")
|
||||||
|
|
||||||
|
|
||||||
@mock_s3
|
@mock_s3
|
||||||
|
Loading…
x
Reference in New Issue
Block a user