|
3 | 3 | import warnings |
4 | 4 | from typing import TYPE_CHECKING, Any |
5 | 5 |
|
6 | | -from zarr.abc.store import ByteRangeRequest, Store |
| 6 | +from zarr.abc.store import ByteRangeRequest, ExplicitRange, OffsetRange, Store, SuffixRange |
7 | 7 | from zarr.storage._common import _dereference_path |
8 | 8 |
|
9 | 9 | if TYPE_CHECKING: |
@@ -209,21 +209,22 @@ async def get( |
209 | 209 | try: |
210 | 210 | if byte_range is None: |
211 | 211 | value = prototype.buffer.from_bytes(await self.fs._cat_file(path)) |
212 | | - elif isinstance(byte_range, tuple): |
| 212 | + elif isinstance(byte_range, ExplicitRange): |
213 | 213 | value = prototype.buffer.from_bytes( |
214 | | - await self.fs._cat_file(path, start=byte_range[0], end=byte_range[1]) |
215 | | - ) |
216 | | - elif isinstance(byte_range, dict): |
217 | | - if "offset" in byte_range: |
218 | | - value = prototype.buffer.from_bytes( |
219 | | - await self.fs._cat_file(path, start=byte_range["offset"], end=None) # type: ignore[typeddict-item] |
220 | | - ) |
221 | | - elif "suffix" in byte_range: |
222 | | - value = prototype.buffer.from_bytes( |
223 | | - await self.fs._cat_file(path, start=-byte_range["suffix"], end=None) |
| 214 | + await self.fs._cat_file( |
| 215 | + path, |
| 216 | + start=byte_range.start, |
| 217 | + end=byte_range.end, |
224 | 218 | ) |
225 | | - else: |
226 | | - raise ValueError("Invalid format for ByteRangeRequest") |
| 219 | + ) |
| 220 | + elif isinstance(byte_range, OffsetRange): |
| 221 | + value = prototype.buffer.from_bytes( |
| 222 | + await self.fs._cat_file(path, start=byte_range.offset, end=None) |
| 223 | + ) |
| 224 | + elif isinstance(byte_range, SuffixRange): |
| 225 | + value = prototype.buffer.from_bytes( |
| 226 | + await self.fs._cat_file(path, start=-byte_range.suffix, end=None) |
| 227 | + ) |
227 | 228 | else: |
228 | 229 | raise ValueError("Invalid format for ByteRangeRequest") |
229 | 230 | except self.allowed_exceptions: |
@@ -286,18 +287,15 @@ async def get_partial_values( |
286 | 287 | if byte_range is None: |
287 | 288 | starts.append(None) |
288 | 289 | stops.append(None) |
289 | | - elif isinstance(byte_range, tuple): |
290 | | - starts.append(byte_range[0]) |
291 | | - stops.append(byte_range[1]) |
292 | | - elif isinstance(byte_range, dict): |
293 | | - if "offset" in byte_range: |
294 | | - starts.append(byte_range["offset"]) # type: ignore[typeddict-item] |
295 | | - stops.append(None) |
296 | | - elif "suffix" in byte_range: |
297 | | - starts.append(-byte_range["suffix"]) |
298 | | - stops.append(None) |
299 | | - else: |
300 | | - raise ValueError("Invalid format for ByteRangeRequest") |
| 290 | + elif isinstance(byte_range, ExplicitRange): |
| 291 | + starts.append(byte_range.start) |
| 292 | + stops.append(byte_range.end) |
| 293 | + elif isinstance(byte_range, OffsetRange): |
| 294 | + starts.append(byte_range.offset) |
| 295 | + stops.append(None) |
| 296 | + elif isinstance(byte_range, SuffixRange): |
| 297 | + starts.append(-byte_range.suffix) |
| 298 | + stops.append(None) |
301 | 299 | else: |
302 | 300 | raise ValueError("Invalid format for ByteRangeRequest") |
303 | 301 | else: |
|
0 commit comments