Break out MissingKey as separate exception. Closes #571.
This commit is contained in:
parent
03903800ff
commit
b932343fec
@ -6,6 +6,10 @@ ERROR_WITH_BUCKET_NAME = """{% extends 'error' %}
|
|||||||
{% block extra %}<BucketName>{{ bucket }}</BucketName>{% endblock %}
|
{% block extra %}<BucketName>{{ bucket }}</BucketName>{% endblock %}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
ERROR_WITH_KEY_NAME = """{% extends 'error' %}
|
||||||
|
{% block extra %}<KeyName>{{ key_name }}</KeyName>{% endblock %}
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
class S3ClientError(RESTError):
|
class S3ClientError(RESTError):
|
||||||
pass
|
pass
|
||||||
@ -40,6 +44,17 @@ class MissingBucket(BucketError):
|
|||||||
*args, **kwargs)
|
*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class MissingKey(S3ClientError):
|
||||||
|
code = 404
|
||||||
|
|
||||||
|
def __init__(self, key_name):
|
||||||
|
super(MissingKey, self).__init__(
|
||||||
|
"NoSuchKey",
|
||||||
|
"The specified key does not exist.",
|
||||||
|
Key=key_name,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class InvalidPartOrder(S3ClientError):
|
class InvalidPartOrder(S3ClientError):
|
||||||
code = 400
|
code = 400
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ import six
|
|||||||
from bisect import insort
|
from bisect import insort
|
||||||
from moto.core import BaseBackend
|
from moto.core import BaseBackend
|
||||||
from moto.core.utils import iso_8601_datetime_with_milliseconds, rfc_1123_datetime
|
from moto.core.utils import iso_8601_datetime_with_milliseconds, rfc_1123_datetime
|
||||||
from .exceptions import BucketAlreadyExists, MissingBucket, InvalidPart, EntityTooSmall
|
from .exceptions import BucketAlreadyExists, MissingBucket, MissingKey, InvalidPart, EntityTooSmall
|
||||||
from .utils import clean_key_name, _VersionedKeyStore
|
from .utils import clean_key_name, _VersionedKeyStore
|
||||||
|
|
||||||
UPLOAD_ID_BYTES = 43
|
UPLOAD_ID_BYTES = 43
|
||||||
@ -393,11 +393,13 @@ class S3Backend(BaseBackend):
|
|||||||
bucket = self.get_bucket(bucket_name)
|
bucket = self.get_bucket(bucket_name)
|
||||||
if bucket:
|
if bucket:
|
||||||
if version_id is None:
|
if version_id is None:
|
||||||
return bucket.keys.get(key_name)
|
if key_name in bucket.keys:
|
||||||
|
return bucket.keys[key_name]
|
||||||
else:
|
else:
|
||||||
for key in bucket.keys.getlist(key_name):
|
for key in bucket.keys.getlist(key_name):
|
||||||
if str(key._version_id) == str(version_id):
|
if str(key._version_id) == str(version_id):
|
||||||
return key
|
return key
|
||||||
|
raise MissingKey(key_name=key_name)
|
||||||
|
|
||||||
def initiate_multipart(self, bucket_name, key_name, metadata):
|
def initiate_multipart(self, bucket_name, key_name, metadata):
|
||||||
bucket = self.get_bucket(bucket_name)
|
bucket = self.get_bucket(bucket_name)
|
||||||
|
@ -399,11 +399,8 @@ class ResponseObject(_TemplateEnvironmentMixin):
|
|||||||
template = self.response_template(S3_OBJECT_ACL_RESPONSE)
|
template = self.response_template(S3_OBJECT_ACL_RESPONSE)
|
||||||
return 200, headers, template.render(obj=key)
|
return 200, headers, template.render(obj=key)
|
||||||
|
|
||||||
if key:
|
headers.update(key.metadata)
|
||||||
headers.update(key.metadata)
|
return 200, headers, key.value
|
||||||
return 200, headers, key.value
|
|
||||||
else:
|
|
||||||
return 404, headers, ""
|
|
||||||
|
|
||||||
def _key_response_put(self, request, body, bucket_name, query, key_name, headers):
|
def _key_response_put(self, request, body, bucket_name, query, key_name, headers):
|
||||||
if query.get('uploadId') and query.get('partNumber'):
|
if query.get('uploadId') and query.get('partNumber'):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user