Merge pull request #518 from millerdev/fix-s3-server
Fix delete keys with moto_server s3
This commit is contained in:
commit
eed5b240c1
@ -24,8 +24,11 @@ def parse_key_name(pth):
|
|||||||
return pth.lstrip("/")
|
return pth.lstrip("/")
|
||||||
|
|
||||||
|
|
||||||
def is_delete_keys(path, bucket_name):
|
def is_delete_keys(request, path, bucket_name):
|
||||||
return path == u'/?delete'
|
return path == u'/?delete' or (
|
||||||
|
path == u'/' and
|
||||||
|
getattr(request, "query_string", "") == "delete"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class ResponseObject(_TemplateEnvironmentMixin):
|
class ResponseObject(_TemplateEnvironmentMixin):
|
||||||
@ -50,9 +53,9 @@ class ResponseObject(_TemplateEnvironmentMixin):
|
|||||||
|
|
||||||
def is_delete_keys(self, request, path, bucket_name):
|
def is_delete_keys(self, request, path, bucket_name):
|
||||||
if self.subdomain_based_buckets(request):
|
if self.subdomain_based_buckets(request):
|
||||||
return is_delete_keys(path, bucket_name)
|
return is_delete_keys(request, path, bucket_name)
|
||||||
else:
|
else:
|
||||||
return bucketpath_is_delete_keys(path, bucket_name)
|
return bucketpath_is_delete_keys(request, path, bucket_name)
|
||||||
|
|
||||||
def parse_bucket_name_from_url(self, request, url):
|
def parse_bucket_name_from_url(self, request, url):
|
||||||
if self.subdomain_based_buckets(request):
|
if self.subdomain_based_buckets(request):
|
||||||
@ -118,7 +121,7 @@ class ResponseObject(_TemplateEnvironmentMixin):
|
|||||||
elif method == 'DELETE':
|
elif method == 'DELETE':
|
||||||
return self._bucket_response_delete(body, bucket_name, querystring, headers)
|
return self._bucket_response_delete(body, bucket_name, querystring, headers)
|
||||||
elif method == 'POST':
|
elif method == 'POST':
|
||||||
return self._bucket_response_post(request, bucket_name, headers)
|
return self._bucket_response_post(request, body, bucket_name, headers)
|
||||||
else:
|
else:
|
||||||
raise NotImplementedError("Method {0} has not been impelemented in the S3 backend yet".format(method))
|
raise NotImplementedError("Method {0} has not been impelemented in the S3 backend yet".format(method))
|
||||||
|
|
||||||
@ -265,9 +268,9 @@ class ResponseObject(_TemplateEnvironmentMixin):
|
|||||||
template = self.response_template(S3_DELETE_BUCKET_WITH_ITEMS_ERROR)
|
template = self.response_template(S3_DELETE_BUCKET_WITH_ITEMS_ERROR)
|
||||||
return 409, headers, template.render(bucket=removed_bucket)
|
return 409, headers, template.render(bucket=removed_bucket)
|
||||||
|
|
||||||
def _bucket_response_post(self, request, bucket_name, headers):
|
def _bucket_response_post(self, request, body, bucket_name, headers):
|
||||||
if self.is_delete_keys(request, request.path, bucket_name):
|
if self.is_delete_keys(request, request.path, bucket_name):
|
||||||
return self._bucket_response_delete_keys(request, bucket_name, headers)
|
return self._bucket_response_delete_keys(request, body, bucket_name, headers)
|
||||||
|
|
||||||
# POST to bucket-url should create file from form
|
# POST to bucket-url should create file from form
|
||||||
if hasattr(request, 'form'):
|
if hasattr(request, 'form'):
|
||||||
@ -294,10 +297,10 @@ class ResponseObject(_TemplateEnvironmentMixin):
|
|||||||
|
|
||||||
return 200, headers, ""
|
return 200, headers, ""
|
||||||
|
|
||||||
def _bucket_response_delete_keys(self, request, bucket_name, headers):
|
def _bucket_response_delete_keys(self, request, body, bucket_name, headers):
|
||||||
template = self.response_template(S3_DELETE_KEYS_RESPONSE)
|
template = self.response_template(S3_DELETE_KEYS_RESPONSE)
|
||||||
|
|
||||||
keys = minidom.parseString(request.body.decode('utf-8')).getElementsByTagName('Key')
|
keys = minidom.parseString(body).getElementsByTagName('Key')
|
||||||
deleted_names = []
|
deleted_names = []
|
||||||
error_names = []
|
error_names = []
|
||||||
|
|
||||||
|
@ -15,5 +15,8 @@ def parse_key_name(path):
|
|||||||
return "/".join(path.rstrip("/").split("/")[2:])
|
return "/".join(path.rstrip("/").split("/")[2:])
|
||||||
|
|
||||||
|
|
||||||
def is_delete_keys(path, bucket_name):
|
def is_delete_keys(request, path, bucket_name):
|
||||||
return path == u'/' + bucket_name + u'/?delete'
|
return path == u'/' + bucket_name + u'/?delete' or (
|
||||||
|
path == u'/' + bucket_name and
|
||||||
|
getattr(request, "query_string", "") == "delete"
|
||||||
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user