Skip to content

Commit cf847b0

Browse files
committed
Handle non-existent bucket for s3 mapping
1 parent 7790640 commit cf847b0

File tree

3 files changed

+25
-2
lines changed

3 files changed

+25
-2
lines changed

s3fs/core.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -463,6 +463,8 @@ def bulk_delete(self, pathlist):
463463
pathlist : listof strings
464464
The keys to remove, must all be in the same bucket.
465465
"""
466+
if not pathlist:
467+
return
466468
buckets = {split_path(path)[0] for path in pathlist}
467469
if len(buckets) > 1:
468470
raise ValueError("Bulk delete files should refer to only one bucket")

s3fs/mapping.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from collections import MutableMapping
33
import os
44

5-
from .core import S3FileSystem
5+
from .core import S3FileSystem, split_path
66

77

88
class S3Map(MutableMapping):
@@ -30,12 +30,19 @@ class S3Map(MutableMapping):
3030
b'Hello World'
3131
"""
3232

33-
def __init__(self, root, s3=None, check=False):
33+
def __init__(self, root, s3=None, check=False, create=False):
3434
self.s3 = s3 or S3FileSystem.current()
3535
self.root = root
3636
if check:
3737
self.s3.touch(root+'/a')
3838
self.s3.rm(root+'/a')
39+
else:
40+
bucket = split_path(root)[0]
41+
if create:
42+
self.s3.mkdir(bucket)
43+
elif not self.s3.exists(bucket):
44+
raise ValueError("Bucket %s does not exist."
45+
" Create bucket with the ``create=True`` keyword")
3946

4047
def clear(self):
4148
"""Remove all keys below root - empties out mapping

s3fs/tests/test_mapping.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,3 +91,17 @@ def test_bytearray(s3):
9191
d['x'] = bytearray(b'123')
9292

9393
assert d['x'] == b'123'
94+
95+
96+
def test_new_bucket(s3):
97+
try:
98+
d = S3Map('new-bucket', s3)
99+
assert False
100+
except ValueError as e:
101+
assert 'create=True' in str(e)
102+
103+
d = S3Map('new-bucket', s3, create=True)
104+
assert not d
105+
106+
d = S3Map('new-bucket/new-directory', s3)
107+
assert not d

0 commit comments

Comments
 (0)