#4018 - Raise NoSuchUpload when listing a non-existing multipart upload (#4031)

This commit is contained in:
Bert Blommers 2021-06-24 08:14:28 +01:00 committed by GitHub
commit 4778377e8e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 45 additions and 4 deletions

View file

@ -15,6 +15,10 @@ ERROR_WITH_ARGUMENT = """{% extends 'single_error' %}
<ArgumentValue>{{ value }}</ArgumentValue>{% endblock %}
"""
ERROR_WITH_UPLOADID = """{% extends 'single_error' %}
{% block extra %}<UploadId>{{ upload_id }}</UploadId>{% endblock %}
"""
ERROR_WITH_CONDITION_NAME = """{% extends 'single_error' %}
{% block extra %}<Condition>{{ condition }}</Condition>{% endblock %}
"""
@ -418,9 +422,15 @@ class NoSystemTags(S3ClientError):
class NoSuchUpload(S3ClientError):
code = 404
def __init__(self):
def __init__(self, upload_id, *args, **kwargs):
kwargs.setdefault("template", "error_uploadid")
kwargs["upload_id"] = upload_id
self.templates["error_uploadid"] = ERROR_WITH_UPLOADID
super(NoSuchUpload, self).__init__(
"NoSuchUpload", "The specified multipart upload does not exist."
"NoSuchUpload",
"The specified upload does not exist. The upload ID may be invalid, or the upload may have been aborted or completed.",
*args,
**kwargs
)

View file

@ -1604,11 +1604,13 @@ class S3Backend(BaseBackend):
bucket = self.get_bucket(bucket_name)
multipart_data = bucket.multiparts.get(multipart_id, None)
if not multipart_data:
raise NoSuchUpload()
raise NoSuchUpload(upload_id=multipart_id)
del bucket.multiparts[multipart_id]
def list_multipart(self, bucket_name, multipart_id):
bucket = self.get_bucket(bucket_name)
if multipart_id not in bucket.multiparts:
raise NoSuchUpload(upload_id=multipart_id)
return list(bucket.multiparts[multipart_id].list_parts())
def get_all_multiparts(self, bucket_name):