33import warnings
44from typing import TYPE_CHECKING , Any
55
6- from zarr .abc .store import ByteRangeRequest , Store
6+ from zarr .abc .store import ByteRangeRequest , ExplicitRange , OffsetRange , Store , SuffixRange
77from zarr .storage ._common import _dereference_path
88
99if TYPE_CHECKING :
@@ -199,7 +199,7 @@ async def get(
199199 self ,
200200 key : str ,
201201 prototype : BufferPrototype ,
202- byte_range : ByteRangeRequest = None ,
202+ byte_range : ByteRangeRequest | None = None ,
203203 ) -> Buffer | None :
204204 # docstring inherited
205205 if not self ._is_open :
@@ -209,25 +209,22 @@ async def get(
209209 try :
210210 if byte_range is None :
211211 value = prototype .buffer .from_bytes (await self .fs ._cat_file (path ))
212- elif isinstance (byte_range , dict ):
213- if "start" in byte_range :
214- value = prototype .buffer .from_bytes (
215- await self .fs ._cat_file (
216- path ,
217- start = byte_range ["start" ], # type: ignore[typeddict-item]
218- end = byte_range ["end" ], # type: ignore[typeddict-item]
219- )
212+ elif isinstance (byte_range , ExplicitRange ):
213+ value = prototype .buffer .from_bytes (
214+ await self .fs ._cat_file (
215+ path ,
216+ start = byte_range .start ,
217+ end = byte_range .end ,
220218 )
221- elif "offset" in byte_range :
222- value = prototype .buffer .from_bytes (
223- await self .fs ._cat_file (path , start = byte_range ["offset" ], end = None ) # type: ignore[typeddict-item]
224- )
225- elif "suffix" in byte_range :
226- value = prototype .buffer .from_bytes (
227- await self .fs ._cat_file (path , start = - byte_range ["suffix" ], end = None )
228- )
229- else :
230- 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+ )
231228 else :
232229 raise ValueError ("Invalid format for ByteRangeRequest" )
233230 except self .allowed_exceptions :
@@ -276,7 +273,7 @@ async def exists(self, key: str) -> bool:
276273 async def get_partial_values (
277274 self ,
278275 prototype : BufferPrototype ,
279- key_ranges : Iterable [tuple [str , ByteRangeRequest ]],
276+ key_ranges : Iterable [tuple [str , ByteRangeRequest | None ]],
280277 ) -> list [Buffer | None ]:
281278 # docstring inherited
282279 if key_ranges :
@@ -290,18 +287,15 @@ async def get_partial_values(
290287 if byte_range is None :
291288 starts .append (None )
292289 stops .append (None )
293- elif isinstance (byte_range , dict ):
294- if "start" in byte_range :
295- starts .append (byte_range ["start" ]) # type: ignore[typeddict-item]
296- stops .append (byte_range ["end" ]) # type: ignore[typeddict-item]
297- elif "offset" in byte_range :
298- starts .append (byte_range ["offset" ]) # type: ignore[typeddict-item]
299- stops .append (None )
300- elif "suffix" in byte_range :
301- starts .append (- byte_range ["suffix" ])
302- stops .append (None )
303- else :
304- 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 )
305299 else :
306300 raise ValueError ("Invalid format for ByteRangeRequest" )
307301 else :
0 commit comments