S3 - Fix NoSuchKey-format (#4572)
This commit is contained in:
parent
2247fb4d99
commit
60d9667da2
@ -5,7 +5,7 @@ ERROR_WITH_BUCKET_NAME = """{% extends 'single_error' %}
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
ERROR_WITH_KEY_NAME = """{% extends 'single_error' %}
|
ERROR_WITH_KEY_NAME = """{% extends 'single_error' %}
|
||||||
{% block extra %}<KeyName>{{ key_name }}</KeyName>{% endblock %}
|
{% block extra %}<Key>{{ key }}</Key>{% endblock %}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
ERROR_WITH_ARGUMENT = """{% extends 'single_error' %}
|
ERROR_WITH_ARGUMENT = """{% extends 'single_error' %}
|
||||||
@ -91,9 +91,11 @@ class MissingBucket(BucketError):
|
|||||||
class MissingKey(S3ClientError):
|
class MissingKey(S3ClientError):
|
||||||
code = 404
|
code = 404
|
||||||
|
|
||||||
def __init__(self, key_name):
|
def __init__(self, **kwargs):
|
||||||
|
kwargs.setdefault("template", "key_error")
|
||||||
|
self.templates["key_error"] = ERROR_WITH_KEY_NAME
|
||||||
super(MissingKey, self).__init__(
|
super(MissingKey, self).__init__(
|
||||||
"NoSuchKey", "The specified key does not exist.", Key=key_name
|
"NoSuchKey", "The specified key does not exist.", **kwargs
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -1620,7 +1620,7 @@ class S3Backend(BaseBackend):
|
|||||||
if key is not None:
|
if key is not None:
|
||||||
key.set_acl(acl)
|
key.set_acl(acl)
|
||||||
else:
|
else:
|
||||||
raise MissingKey(key_name)
|
raise MissingKey(key=key_name)
|
||||||
|
|
||||||
def put_object_legal_hold(
|
def put_object_legal_hold(
|
||||||
self, bucket_name, key_name, version_id, legal_hold_status
|
self, bucket_name, key_name, version_id, legal_hold_status
|
||||||
@ -1686,7 +1686,7 @@ class S3Backend(BaseBackend):
|
|||||||
|
|
||||||
def set_key_tags(self, key, tags, key_name=None):
|
def set_key_tags(self, key, tags, key_name=None):
|
||||||
if key is None:
|
if key is None:
|
||||||
raise MissingKey(key_name)
|
raise MissingKey(key=key_name)
|
||||||
boto_tags_dict = self.tagger.convert_dict_to_tags_input(tags)
|
boto_tags_dict = self.tagger.convert_dict_to_tags_input(tags)
|
||||||
errmsg = self.tagger.validate_tags(boto_tags_dict)
|
errmsg = self.tagger.validate_tags(boto_tags_dict)
|
||||||
if errmsg:
|
if errmsg:
|
||||||
|
@ -1357,7 +1357,7 @@ class ResponseObject(_TemplateEnvironmentMixin, ActionAuthenticatorMixin):
|
|||||||
|
|
||||||
key = self.backend.get_object(bucket_name, key_name, version_id=version_id)
|
key = self.backend.get_object(bucket_name, key_name, version_id=version_id)
|
||||||
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=key_name)
|
||||||
elif key is None:
|
elif key is None:
|
||||||
raise MissingVersion()
|
raise MissingVersion()
|
||||||
|
|
||||||
@ -1552,7 +1552,7 @@ class ResponseObject(_TemplateEnvironmentMixin, ActionAuthenticatorMixin):
|
|||||||
src_version_id=src_version_id,
|
src_version_id=src_version_id,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
return 404, response_headers, ""
|
raise MissingKey(key=src_key)
|
||||||
|
|
||||||
new_key = self.backend.get_object(bucket_name, key_name)
|
new_key = self.backend.get_object(bucket_name, key_name)
|
||||||
mdirective = request.headers.get("x-amz-metadata-directive")
|
mdirective = request.headers.get("x-amz-metadata-directive")
|
||||||
|
@ -3319,6 +3319,25 @@ def test_boto3_head_object_with_versioning():
|
|||||||
old_head_object["VersionId"].should_not.equal(head_object["VersionId"])
|
old_head_object["VersionId"].should_not.equal(head_object["VersionId"])
|
||||||
|
|
||||||
|
|
||||||
|
@mock_s3
|
||||||
|
def test_boto3_copy_non_existing_file():
|
||||||
|
s3 = boto3.resource("s3")
|
||||||
|
src = "srcbucket"
|
||||||
|
target = "target"
|
||||||
|
s3.create_bucket(Bucket=src)
|
||||||
|
s3.create_bucket(Bucket=target)
|
||||||
|
|
||||||
|
s3_client = boto3.client("s3")
|
||||||
|
with pytest.raises(ClientError) as exc:
|
||||||
|
s3_client.copy_object(
|
||||||
|
Bucket=target, CopySource={"Bucket": src, "Key": "foofoofoo"}, Key="newkey"
|
||||||
|
)
|
||||||
|
err = exc.value.response["Error"]
|
||||||
|
err["Code"].should.equal("NoSuchKey")
|
||||||
|
err["Message"].should.equal("The specified key does not exist.")
|
||||||
|
err["Key"].should.equal("foofoofoo")
|
||||||
|
|
||||||
|
|
||||||
@mock_s3
|
@mock_s3
|
||||||
def test_boto3_copy_object_with_versioning():
|
def test_boto3_copy_object_with_versioning():
|
||||||
client = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
|
client = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
|
||||||
@ -3359,7 +3378,7 @@ def test_boto3_copy_object_with_versioning():
|
|||||||
Bucket="blah",
|
Bucket="blah",
|
||||||
Key="test5",
|
Key="test5",
|
||||||
)
|
)
|
||||||
e.value.response["Error"]["Code"].should.equal("404")
|
e.value.response["Error"]["Code"].should.equal("NoSuchKey")
|
||||||
|
|
||||||
response = client.create_multipart_upload(Bucket="blah", Key="test4")
|
response = client.create_multipart_upload(Bucket="blah", Key="test4")
|
||||||
upload_id = response["UploadId"]
|
upload_id = response["UploadId"]
|
||||||
@ -4701,6 +4720,7 @@ def test_boto3_put_object_tagging():
|
|||||||
{
|
{
|
||||||
"Code": "NoSuchKey",
|
"Code": "NoSuchKey",
|
||||||
"Message": "The specified key does not exist.",
|
"Message": "The specified key does not exist.",
|
||||||
|
"Key": "key-with-tags",
|
||||||
"RequestID": "7a62c49f-347e-4fc4-9331-6e8eEXAMPLE",
|
"RequestID": "7a62c49f-347e-4fc4-9331-6e8eEXAMPLE",
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@ -4760,6 +4780,7 @@ def test_boto3_put_object_tagging_on_earliest_version():
|
|||||||
{
|
{
|
||||||
"Code": "NoSuchKey",
|
"Code": "NoSuchKey",
|
||||||
"Message": "The specified key does not exist.",
|
"Message": "The specified key does not exist.",
|
||||||
|
"Key": "key-with-tags",
|
||||||
"RequestID": "7a62c49f-347e-4fc4-9331-6e8eEXAMPLE",
|
"RequestID": "7a62c49f-347e-4fc4-9331-6e8eEXAMPLE",
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@ -4828,6 +4849,7 @@ def test_boto3_put_object_tagging_on_both_version():
|
|||||||
{
|
{
|
||||||
"Code": "NoSuchKey",
|
"Code": "NoSuchKey",
|
||||||
"Message": "The specified key does not exist.",
|
"Message": "The specified key does not exist.",
|
||||||
|
"Key": "key-with-tags",
|
||||||
"RequestID": "7a62c49f-347e-4fc4-9331-6e8eEXAMPLE",
|
"RequestID": "7a62c49f-347e-4fc4-9331-6e8eEXAMPLE",
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user