From 4ab3b318eb65407eac047e78998d3b9209bae55a Mon Sep 17 00:00:00 2001 From: Steve Pulec Date: Wed, 10 Dec 2014 20:44:00 -0500 Subject: [PATCH] Add S3 location response. Closes #279. --- moto/s3/models.py | 11 ++++++++--- moto/s3/responses.py | 9 ++++++++- tests/test_s3/test_s3.py | 7 +++++++ 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/moto/s3/models.py b/moto/s3/models.py index 343b3ae87..21e7284d9 100644 --- a/moto/s3/models.py +++ b/moto/s3/models.py @@ -160,12 +160,17 @@ class FakeMultipart(object): class FakeBucket(object): - def __init__(self, name): + def __init__(self, name, region_name): self.name = name + self.region_name = region_name self.keys = _VersionedKeyStore() self.multiparts = {} self.versioning_status = None + @property + def location(self): + return self.region_name + @property def is_versioned(self): return self.versioning_status == 'Enabled' @@ -184,10 +189,10 @@ class S3Backend(BaseBackend): def __init__(self): self.buckets = {} - def create_bucket(self, bucket_name): + def create_bucket(self, bucket_name, region_name): if bucket_name in self.buckets: raise BucketAlreadyExists() - new_bucket = FakeBucket(name=bucket_name) + new_bucket = FakeBucket(name=bucket_name, region_name=region_name) self.buckets[bucket_name] = new_bucket return new_bucket diff --git a/moto/s3/responses.py b/moto/s3/responses.py index 7f98c91cf..fba53bb83 100644 --- a/moto/s3/responses.py +++ b/moto/s3/responses.py @@ -89,6 +89,10 @@ class ResponseObject(object): return 200, headers, template.render( bucket_name=bucket_name, uploads=multiparts) + elif 'location' in querystring: + bucket = self.backend.get_bucket(bucket_name) + template = Template(S3_BUCKET_LOCATION) + return 200, headers, template.render(location=bucket.location) elif 'versioning' in querystring: versioning = self.backend.get_bucket_versioning(bucket_name) template = Template(S3_BUCKET_GET_VERSIONING) @@ -148,7 +152,7 @@ class ResponseObject(object): return 404, headers, "" else: try: - new_bucket = self.backend.create_bucket(bucket_name) + new_bucket = self.backend.create_bucket(bucket_name, region_name) except BucketAlreadyExists: if region_name == DEFAULT_REGION_NAME: # us-east-1 has different behavior @@ -470,6 +474,9 @@ S3_DELETE_BUCKET_WITH_ITEMS_ERROR = """ sdfgdsfgdsfgdfsdsfgdfs """ +S3_BUCKET_LOCATION = """ +{{ location }}""" + S3_BUCKET_VERSIONING = """ diff --git a/tests/test_s3/test_s3.py b/tests/test_s3/test_s3.py index 2edde307e..161e5bddd 100644 --- a/tests/test_s3/test_s3.py +++ b/tests/test_s3/test_s3.py @@ -685,3 +685,10 @@ def test_setting_content_encoding(): key = bucket.get_key("keyname") key.content_encoding.should.equal("gzip") + + +@mock_s3 +def test_bucket_location(): + conn = boto.s3.connect_to_region("us-west-2") + bucket = conn.create_bucket('mybucket') + bucket.get_location().should.equal("us-west-2")