Skip to content

Commit 7b38e1e

Browse files
committed
feat(fsspec): BufferedFile forwards size to open_reader
1 parent 6c18cd0 commit 7b38e1e

2 files changed

Lines changed: 24 additions & 1 deletion

File tree

obstore/python/obstore/fsspec.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -681,7 +681,12 @@ def __init__( # noqa: PLR0913
681681

682682
if self.mode == "rb":
683683
buffer_size = 1024 * 1024 if buffer_size is None else buffer_size
684-
self._reader = open_reader(store, path, buffer_size=buffer_size)
684+
self._reader = open_reader(
685+
store,
686+
path,
687+
buffer_size=buffer_size,
688+
size=self.size,
689+
)
685690
elif self.mode == "wb":
686691
buffer_size = 10 * 1024 * 1024 if buffer_size is None else buffer_size
687692
self._writer = open_writer(

tests/test_fsspec.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,24 @@ async def test_info_synthesizes_directory_for_trailing_slash_query():
155155
assert mock_construct.call_count == 0
156156

157157

158+
def test_buffered_file_forwards_size_to_open_reader():
159+
register("file")
160+
fs: FsspecStore = fsspec.filesystem("file", asynchronous=False)
161+
162+
with TemporaryDirectory() as tmp:
163+
path = Path(tmp) / "sized.bin"
164+
path.write_bytes(b"x" * 1000)
165+
166+
file = fs._open(str(path), mode="rb", size=500)
167+
168+
assert file.size == 500
169+
assert file._reader.size == 500
170+
assert "last_modified" not in file._reader.meta
171+
172+
data = file.read()
173+
assert len(data) == 500
174+
175+
158176
def test_construct_store_cache_diff_bucket_name(
159177
minio_bucket: tuple[S3Config, ClientConfig],
160178
):

0 commit comments

Comments
 (0)