Skip to content

Commit df620c1

Browse files
authored
Merge pull request #140 from delijati/master
#139 add region_name to create_bucket
2 parents a2fa823 + cc140c5 commit df620c1

File tree

2 files changed

+42
-2
lines changed

2 files changed

+42
-2
lines changed

s3fs/core.py

+17-2
Original file line numberDiff line numberDiff line change
@@ -772,7 +772,15 @@ def put(self, filename, path, **kwargs):
772772
f2.write(data)
773773

774774
def mkdir(self, path, acl="", **kwargs):
775-
""" Make new bucket or empty key """
775+
""" Make new bucket or empty key
776+
777+
Parameters
778+
----------
779+
acl: str
780+
ACL to set when creating
781+
region_name : str
782+
region in which the bucket should be created
783+
"""
776784
acl = acl or self.s3_additional_kwargs.get('ACL', '')
777785
self.touch(path, acl=acl, **kwargs)
778786

@@ -961,7 +969,14 @@ def touch(self, path, acl="", **kwargs):
961969
if acl and acl not in buck_acls:
962970
raise ValueError('ACL not in %s', buck_acls)
963971
try:
964-
self.s3.create_bucket(Bucket=bucket, ACL=acl)
972+
params = {"Bucket": bucket, 'ACL': acl}
973+
region_name = (kwargs.get("region_name", None) or
974+
self.client_kwargs.get("region_name", None))
975+
if region_name:
976+
params['CreateBucketConfiguration'] = {
977+
'LocationConstraint': region_name
978+
}
979+
self.s3.create_bucket(**params)
965980
self.invalidate_cache('')
966981
self.invalidate_cache(bucket)
967982
except (ClientError, ParamValidationError):

s3fs/tests/test_s3fs.py

+25
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,31 @@ def test_rmdir(s3):
294294
assert bucket not in s3.ls('/')
295295

296296

297+
def test_mkdir(s3):
298+
bucket = 'test1_bucket'
299+
s3.mkdir(bucket)
300+
assert bucket in s3.ls('/')
301+
302+
303+
def test_mkdir_region_name(s3):
304+
bucket = 'test1_bucket'
305+
s3.mkdir(bucket, region_name="eu-central-1")
306+
assert bucket in s3.ls('/')
307+
308+
309+
def test_mkdir_client_region_name():
310+
bucket = 'test1_bucket'
311+
try:
312+
m = moto.mock_s3()
313+
m.start()
314+
s3 = S3FileSystem(anon=False, client_kwargs={"region_name":
315+
"eu-central-1"})
316+
s3.mkdir(bucket)
317+
assert bucket in s3.ls('/')
318+
finally:
319+
m.stop()
320+
321+
297322
def test_bulk_delete(s3):
298323
with pytest.raises((OSError, IOError)):
299324
s3.bulk_delete(['nonexistent/file'])

0 commit comments

Comments
 (0)