Merge pull request #1692 from sanjeevsuresh/exception-when-missing-key
BugFix: Exception in ListObjectVersions with a Prefix that Returns an Empty Result Set
This commit is contained in:
commit
786ec0501e
@ -718,7 +718,7 @@ class S3Backend(BaseBackend):
|
|||||||
if key_name in bucket.keys:
|
if key_name in bucket.keys:
|
||||||
key = bucket.keys[key_name]
|
key = bucket.keys[key_name]
|
||||||
else:
|
else:
|
||||||
for key_version in bucket.keys.getlist(key_name):
|
for key_version in bucket.keys.getlist(key_name, default=[]):
|
||||||
if str(key_version.version_id) == str(version_id):
|
if str(key_version.version_id) == str(version_id):
|
||||||
key = key_version
|
key = key_version
|
||||||
break
|
break
|
||||||
|
@ -2362,6 +2362,35 @@ def test_boto3_list_object_versions():
|
|||||||
response['Body'].read().should.equal(items[-1])
|
response['Body'].read().should.equal(items[-1])
|
||||||
|
|
||||||
|
|
||||||
|
@mock_s3
|
||||||
|
def test_boto3_bad_prefix_list_object_versions():
|
||||||
|
s3 = boto3.client('s3', region_name='us-east-1')
|
||||||
|
bucket_name = 'mybucket'
|
||||||
|
key = 'key-with-versions'
|
||||||
|
bad_prefix = 'key-that-does-not-exist'
|
||||||
|
s3.create_bucket(Bucket=bucket_name)
|
||||||
|
s3.put_bucket_versioning(
|
||||||
|
Bucket=bucket_name,
|
||||||
|
VersioningConfiguration={
|
||||||
|
'Status': 'Enabled'
|
||||||
|
}
|
||||||
|
)
|
||||||
|
items = (six.b('v1'), six.b('v2'))
|
||||||
|
for body in items:
|
||||||
|
s3.put_object(
|
||||||
|
Bucket=bucket_name,
|
||||||
|
Key=key,
|
||||||
|
Body=body
|
||||||
|
)
|
||||||
|
response = s3.list_object_versions(
|
||||||
|
Bucket=bucket_name,
|
||||||
|
Prefix=bad_prefix,
|
||||||
|
)
|
||||||
|
response['ResponseMetadata']['HTTPStatusCode'].should.equal(200)
|
||||||
|
response.should_not.contain('Versions')
|
||||||
|
response.should_not.contain('DeleteMarkers')
|
||||||
|
|
||||||
|
|
||||||
@mock_s3
|
@mock_s3
|
||||||
def test_boto3_delete_markers():
|
def test_boto3_delete_markers():
|
||||||
s3 = boto3.client('s3', region_name='us-east-1')
|
s3 = boto3.client('s3', region_name='us-east-1')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user