From 7e3516f997d18cfc912af7ef6391c13eef9a9c4b Mon Sep 17 00:00:00 2001 From: Josh Palmer Date: Thu, 29 Jan 2015 17:22:06 +0100 Subject: [PATCH 1/2] Added support for listing multipart uploads with prefix. --- moto/s3/responses.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/moto/s3/responses.py b/moto/s3/responses.py index 88b729aa4..750bf68ba 100644 --- a/moto/s3/responses.py +++ b/moto/s3/responses.py @@ -81,10 +81,13 @@ class ResponseObject(_TemplateEnvironmentMixin): def _bucket_response_get(self, bucket_name, querystring, headers): if 'uploads' in querystring: - for unsup in ('delimiter', 'prefix', 'max-uploads'): + for unsup in ('delimiter', 'max-uploads'): if unsup in querystring: raise NotImplementedError("Listing multipart uploads with {} has not been implemented yet.".format(unsup)) multiparts = list(self.backend.get_all_multiparts(bucket_name).values()) + if 'prefix' in querystring: + prefix = querystring.get('prefix', [None])[0] + multiparts = [upload for upload in multiparts if upload.key_name.startswith(prefix)] template = self.response_template(S3_ALL_MULTIPARTS) return 200, headers, template.render( bucket_name=bucket_name, From c7bf6ffc91b378a14c653d6cbf7594f379e38504 Mon Sep 17 00:00:00 2001 From: Jeff Balogh Date: Thu, 29 Jan 2015 09:20:40 -0800 Subject: [PATCH 2/2] Folder results should include the delimiter. --- moto/s3/models.py | 2 +- tests/test_s3/test_s3.py | 2 +- tests/test_s3bucket_path/test_s3bucket_path.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/moto/s3/models.py b/moto/s3/models.py index 21e7284d9..2a78a8003 100644 --- a/moto/s3/models.py +++ b/moto/s3/models.py @@ -333,7 +333,7 @@ class S3Backend(BaseBackend): for key_name, key in bucket.keys.items(): if delimiter and delimiter in key_name: # If delimiter, we need to split out folder_results - folder_results.add(key_name.split(delimiter)[0]) + folder_results.add(key_name.split(delimiter)[0] + delimiter) else: key_results.add(key) diff --git a/tests/test_s3/test_s3.py b/tests/test_s3/test_s3.py index 161e5bddd..1643eaaff 100644 --- a/tests/test_s3/test_s3.py +++ b/tests/test_s3/test_s3.py @@ -496,7 +496,7 @@ def test_bucket_key_listing_order(): # Test delimiter with no prefix delimiter = '/' keys = [x.name for x in bucket.list(prefix=None, delimiter=delimiter)] - keys.should.equal(['toplevel']) + keys.should.equal(['toplevel/']) delimiter = None keys = [x.name for x in bucket.list(prefix + 'x', delimiter)] diff --git a/tests/test_s3bucket_path/test_s3bucket_path.py b/tests/test_s3bucket_path/test_s3bucket_path.py index 9b33efe89..dfa6f2057 100644 --- a/tests/test_s3bucket_path/test_s3bucket_path.py +++ b/tests/test_s3bucket_path/test_s3bucket_path.py @@ -272,7 +272,7 @@ def test_bucket_key_listing_order(): # Test delimiter with no prefix delimiter = '/' keys = [x.name for x in bucket.list(prefix=None, delimiter=delimiter)] - keys.should.equal(['toplevel']) + keys.should.equal(['toplevel/']) delimiter = None keys = [x.name for x in bucket.list(prefix + 'x', delimiter)]