fix list-object-versions with prefix (#1045)

fix list-object-versions with prefix
This commit is contained in:
Alexander Mohr 2017-08-10 17:14:31 -07:00 committed by Jack Danger
parent c9e392a5fe
commit 2447725e98
3 changed files with 14 additions and 4 deletions

View File

@ -422,14 +422,15 @@ class S3Backend(BaseBackend):
encoding_type=None,
key_marker=None,
max_keys=None,
version_id_marker=None):
version_id_marker=None,
prefix=''):
bucket = self.get_bucket(bucket_name)
if any((delimiter, encoding_type, key_marker, version_id_marker)):
raise NotImplementedError(
"Called get_bucket_versions with some of delimiter, encoding_type, key_marker, version_id_marker")
return itertools.chain(*(l for _, l in bucket.keys.iterlists()))
return itertools.chain(*(l for key, l in bucket.keys.iterlists() if key.startswith(prefix)))
def get_bucket_policy(self, bucket_name):
return self.get_bucket(bucket_name).policy

View File

@ -215,7 +215,7 @@ class ResponseObject(_TemplateEnvironmentMixin):
encoding_type = querystring.get('encoding-type', [None])[0]
key_marker = querystring.get('key-marker', [None])[0]
max_keys = querystring.get('max-keys', [None])[0]
prefix = querystring.get('prefix', [None])[0]
prefix = querystring.get('prefix', [''])[0]
version_id_marker = querystring.get('version-id-marker', [None])[0]
bucket = self.backend.get_bucket(bucket_name)
@ -225,7 +225,8 @@ class ResponseObject(_TemplateEnvironmentMixin):
encoding_type=encoding_type,
key_marker=key_marker,
max_keys=max_keys,
version_id_marker=version_id_marker
version_id_marker=version_id_marker,
prefix=prefix
)
latest_versions = self.backend.get_bucket_latest_versions(
bucket_name=bucket_name

View File

@ -770,6 +770,14 @@ def test_list_versions():
versions[1].version_id.should.equal('1')
versions[1].get_contents_as_string().should.equal(b"Version 2")
key = Key(bucket, 'the2-key')
key.set_contents_from_string("Version 1")
keys = list(bucket.list())
keys.should.have.length_of(2)
versions = list(bucket.list_versions(prefix='the2-'))
versions.should.have.length_of(1)
@mock_s3_deprecated
def test_acl_setting():