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):
|
||||
key_name = clean_key_name(key_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,
|
||||
dest_key_name, storage=None, acl=None, src_version_id=None):
|
||||
|
@ -305,11 +305,11 @@ class ResponseObject(_TemplateEnvironmentMixin):
|
||||
error_names = []
|
||||
|
||||
for k in keys:
|
||||
try:
|
||||
key_name = k.firstChild.nodeValue
|
||||
self.backend.delete_key(bucket_name, key_name)
|
||||
key_name = k.firstChild.nodeValue
|
||||
success = self.backend.delete_key(bucket_name, key_name)
|
||||
if success:
|
||||
deleted_names.append(key_name)
|
||||
except KeyError:
|
||||
else:
|
||||
error_names.append(key_name)
|
||||
|
||||
return 200, headers, template.render(deleted=deleted_names, delete_errors=error_names)
|
||||
@ -520,12 +520,9 @@ class ResponseObject(_TemplateEnvironmentMixin):
|
||||
upload_id = query['uploadId'][0]
|
||||
self.backend.cancel_multipart(bucket_name, upload_id)
|
||||
return 204, headers, ""
|
||||
try:
|
||||
removed_key = self.backend.delete_key(bucket_name, key_name)
|
||||
except KeyError:
|
||||
return 404, headers, ""
|
||||
self.backend.delete_key(bucket_name, key_name)
|
||||
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):
|
||||
ps = minidom.parseString(body).getElementsByTagName('Part')
|
||||
|
@ -501,7 +501,8 @@ def test_delete_missing_key():
|
||||
conn = boto.connect_s3('the_key', 'the_secret')
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user