Use xmltodict for parsing
This commit is contained in:
parent
9ed6e52d0a
commit
41abd4344b
@ -839,21 +839,22 @@ class ResponseObject(_TemplateEnvironmentMixin, ActionAuthenticatorMixin):
|
|||||||
|
|
||||||
def _bucket_response_delete_keys(self, request, body, bucket_name):
|
def _bucket_response_delete_keys(self, request, body, bucket_name):
|
||||||
template = self.response_template(S3_DELETE_KEYS_RESPONSE)
|
template = self.response_template(S3_DELETE_KEYS_RESPONSE)
|
||||||
|
body_dict = xmltodict.parse(body)
|
||||||
|
|
||||||
objects = minidom.parseString(body).getElementsByTagName("Object")
|
objects = body_dict["Delete"].get("Object", [])
|
||||||
|
if not isinstance(objects, list):
|
||||||
deleted_objects = []
|
# We expect a list of objects, but when there is a single <Object> node xmltodict does not
|
||||||
error_names = []
|
# return a list.
|
||||||
|
objects = [objects]
|
||||||
if len(objects) == 0:
|
if len(objects) == 0:
|
||||||
raise MalformedXML()
|
raise MalformedXML()
|
||||||
|
|
||||||
|
deleted_objects = []
|
||||||
|
error_names = []
|
||||||
|
|
||||||
for object_ in objects:
|
for object_ in objects:
|
||||||
key_name = object_.getElementsByTagName("Key")[0].firstChild.nodeValue
|
key_name = object_["Key"]
|
||||||
version_id_node = object_.getElementsByTagName("VersionId")
|
version_id = object_.get("VersionId", None)
|
||||||
if version_id_node:
|
|
||||||
version_id = version_id_node[0].firstChild.nodeValue
|
|
||||||
else:
|
|
||||||
version_id = None
|
|
||||||
|
|
||||||
success = self.backend.delete_key(
|
success = self.backend.delete_key(
|
||||||
bucket_name, undo_clean_key_name(key_name), version_id=version_id
|
bucket_name, undo_clean_key_name(key_name), version_id=version_id
|
||||||
|
Loading…
Reference in New Issue
Block a user