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")