Skip to content

Commit

Permalink
Handle None as start or end of byte range request
Browse files Browse the repository at this point in the history
  • Loading branch information
maxrjones committed Dec 15, 2024
1 parent f989884 commit 40e1b25
Showing 1 changed file with 7 additions and 2 deletions.
9 changes: 7 additions & 2 deletions src/zarr/storage/object_store.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,17 +71,22 @@ async def get(
return prototype.buffer.from_bytes(await resp.bytes_async())

start, end = byte_range
if (start is None or start == 0) and end is None:
resp = await obs.get_async(self.store, key)
return prototype.buffer.from_bytes(await resp.bytes_async())
if start is not None and end is not None:
resp = await obs.get_range_async(self.store, key, start=start, end=end)
return prototype.buffer.from_bytes(memoryview(resp))
elif start is not None:
if start >= 0:
if start > 0:
# Offset request
resp = await obs.get_async(self.store, key, options={"range": {"offset": start}})
else:
resp = await obs.get_async(self.store, key, options={"range": {"suffix": start}})

return prototype.buffer.from_bytes(await resp.bytes_async())
elif end is not None:
resp = await obs.get_range_async(self.store, key, start=0, end=end)
return prototype.buffer.from_bytes(memoryview(resp))
else:
raise ValueError(f"Unexpected input to `get`: {start=}, {end=}")

Expand Down

0 comments on commit 40e1b25

Please sign in to comment.