Skip to content

Commit f425eb7

Browse files
committed
ENH: File-like properties
1 parent 2892cdf commit f425eb7

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

s3fs/core.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,7 @@ def __init__(self, s3, path, mode='rb', block_size=5*2**20):
503503
self.start = None
504504
self.end = None
505505
self.closed = False
506+
self._mode = mode
506507
if mode == 'wb':
507508
self.buffer = io.BytesIO()
508509
self.parts = []
@@ -520,6 +521,15 @@ def __init__(self, s3, path, mode='rb', block_size=5*2**20):
520521
except ClientError:
521522
raise IOError("File not accessible", path)
522523

524+
def readable(self):
525+
return self.mode == 'rb'
526+
527+
def seekable(self):
528+
return self.readable()
529+
530+
def writable(self):
531+
return self.mode == 'wb'
532+
523533
def info(self):
524534
""" File information about this path """
525535
return self.s3.info(self.path)

s3fs/tests/test_s3fs.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -499,3 +499,26 @@ def test_write_blocks(s3):
499499
f.write(b'a' * 15*2**20)
500500
assert f.buffer.tell() == 0
501501
assert s3.info(test_bucket_name+'/temp')['Size'] == 15*2**20
502+
503+
504+
def test_readable(s3):
505+
with s3.open(a, 'wb') as f:
506+
assert not f.readable()
507+
508+
with s3.open(a, 'rb') as f:
509+
assert f.readable()
510+
511+
512+
def test_seekable(s3):
513+
with s3.open(a, 'wb') as f:
514+
assert not f.seekable()
515+
516+
with s3.open(a, 'rb') as f:
517+
assert f.seekable()
518+
519+
def test_writable(s3):
520+
with s3.open(a, 'wb') as f:
521+
assert f.writable()
522+
523+
with s3.open(a, 'rb') as f:
524+
assert not f.writable()

0 commit comments

Comments
 (0)