Merge pull request #2276 from aakhan-sep/master
Implement If-Modified-Since in GET Object for S3 Bucket
This commit is contained in:
commit
8c61bce1a2
@ -657,7 +657,7 @@ class ResponseObject(_TemplateEnvironmentMixin):
|
|||||||
body = b''
|
body = b''
|
||||||
|
|
||||||
if method == 'GET':
|
if method == 'GET':
|
||||||
return self._key_response_get(bucket_name, query, key_name, headers)
|
return self._key_response_get(bucket_name, query, key_name, headers=request.headers)
|
||||||
elif method == 'PUT':
|
elif method == 'PUT':
|
||||||
return self._key_response_put(request, body, bucket_name, query, key_name, headers)
|
return self._key_response_put(request, body, bucket_name, query, key_name, headers)
|
||||||
elif method == 'HEAD':
|
elif method == 'HEAD':
|
||||||
@ -684,10 +684,15 @@ class ResponseObject(_TemplateEnvironmentMixin):
|
|||||||
parts=parts
|
parts=parts
|
||||||
)
|
)
|
||||||
version_id = query.get('versionId', [None])[0]
|
version_id = query.get('versionId', [None])[0]
|
||||||
|
if_modified_since = headers.get('If-Modified-Since', None)
|
||||||
key = self.backend.get_key(
|
key = self.backend.get_key(
|
||||||
bucket_name, key_name, version_id=version_id)
|
bucket_name, key_name, version_id=version_id)
|
||||||
if key is None:
|
if key is None:
|
||||||
raise MissingKey(key_name)
|
raise MissingKey(key_name)
|
||||||
|
if if_modified_since:
|
||||||
|
if_modified_since = str_to_rfc_1123_datetime(if_modified_since)
|
||||||
|
if if_modified_since and key.last_modified < if_modified_since:
|
||||||
|
return 304, response_headers, 'Not Modified'
|
||||||
if 'acl' in query:
|
if 'acl' in query:
|
||||||
template = self.response_template(S3_OBJECT_ACL_RESPONSE)
|
template = self.response_template(S3_OBJECT_ACL_RESPONSE)
|
||||||
return 200, response_headers, template.render(obj=key)
|
return 200, response_headers, template.render(obj=key)
|
||||||
|
@ -1596,6 +1596,28 @@ def test_boto3_delete_versioned_bucket():
|
|||||||
|
|
||||||
client.delete_bucket(Bucket='blah')
|
client.delete_bucket(Bucket='blah')
|
||||||
|
|
||||||
|
@mock_s3
|
||||||
|
def test_boto3_get_object_if_modified_since():
|
||||||
|
s3 = boto3.client('s3', region_name='us-east-1')
|
||||||
|
bucket_name = "blah"
|
||||||
|
s3.create_bucket(Bucket=bucket_name)
|
||||||
|
|
||||||
|
key = 'hello.txt'
|
||||||
|
|
||||||
|
s3.put_object(
|
||||||
|
Bucket=bucket_name,
|
||||||
|
Key=key,
|
||||||
|
Body='test'
|
||||||
|
)
|
||||||
|
|
||||||
|
with assert_raises(botocore.exceptions.ClientError) as err:
|
||||||
|
s3.get_object(
|
||||||
|
Bucket=bucket_name,
|
||||||
|
Key=key,
|
||||||
|
IfModifiedSince=datetime.datetime.utcnow() + datetime.timedelta(hours=1)
|
||||||
|
)
|
||||||
|
e = err.exception
|
||||||
|
e.response['Error'].should.equal({'Code': '304', 'Message': 'Not Modified'})
|
||||||
|
|
||||||
@mock_s3
|
@mock_s3
|
||||||
def test_boto3_head_object_if_modified_since():
|
def test_boto3_head_object_if_modified_since():
|
||||||
|
Loading…
Reference in New Issue
Block a user