S3 - Fix exception for missing versionID (#3887)

This commit is contained in:
amar jandu 2021-04-30 04:36:08 -07:00 committed by GitHub
parent 273d632515
commit 58381cce8f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 15 additions and 6 deletions

View File

@ -76,12 +76,21 @@ class MissingKey(S3ClientError):
class MissingVersion(S3ClientError): class MissingVersion(S3ClientError):
code = 404 code = 404
def __init__(self, *args, **kwargs):
super(MissingVersion, self).__init__(
"NoSuchVersion", "The specified version does not exist.", *args, **kwargs
)
class InvalidVersion(S3ClientError):
code = 400
def __init__(self, version_id, *args, **kwargs): def __init__(self, version_id, *args, **kwargs):
kwargs.setdefault("template", "argument_error") kwargs.setdefault("template", "argument_error")
kwargs["name"] = "versionId" kwargs["name"] = "versionId"
kwargs["value"] = version_id kwargs["value"] = version_id
self.templates["argument_error"] = ERROR_WITH_ARGUMENT self.templates["argument_error"] = ERROR_WITH_ARGUMENT
super(MissingVersion, self).__init__( super(InvalidVersion, self).__init__(
"InvalidArgument", "Invalid version id specified", *args, **kwargs "InvalidArgument", "Invalid version id specified", *args, **kwargs
) )

View File

@ -1210,7 +1210,7 @@ class ResponseObject(_TemplateEnvironmentMixin, ActionAuthenticatorMixin):
if key is None and version_id is None: if key is None and version_id is None:
raise MissingKey(key_name) raise MissingKey(key_name)
elif key is None: elif key is None:
raise MissingVersion(version_id) raise MissingVersion()
if if_unmodified_since: if if_unmodified_since:
if_unmodified_since = str_to_rfc_1123_datetime(if_unmodified_since) if_unmodified_since = str_to_rfc_1123_datetime(if_unmodified_since)

View File

@ -5013,10 +5013,10 @@ def test_get_unknown_version_should_throw_specific_error():
with pytest.raises(ClientError) as e: with pytest.raises(ClientError) as e:
client.get_object(Bucket=bucket_name, Key=object_key, VersionId="unknown") client.get_object(Bucket=bucket_name, Key=object_key, VersionId="unknown")
e.value.response["Error"]["Code"].should.equal("InvalidArgument") e.value.response["Error"]["Code"].should.equal("NoSuchVersion")
e.value.response["Error"]["Message"].should.equal("Invalid version id specified") e.value.response["Error"]["Message"].should.equal(
e.value.response["Error"]["ArgumentName"].should.equal("versionId") "The specified version does not exist."
e.value.response["Error"]["ArgumentValue"].should.equal("unknown") )
@mock_s3 @mock_s3