zarr-python
zarr-python copied to clipboard
Make the `ByteRangeRequest` more literate
Continuing a conversation from #1661
We have IO operations that can fetch ranges of bytes. That byte range parameter is parameterized by an (optional) 2-tuple of nullable ints, i.e. tuple[int | None, int | None] | None
. The tuple part is ambiguous between two similar specifications of a range of integers -- (start, step)
and (start, stop)
; this ambiguity is bad.
We should rework this type so that it's harder to be confused about these two possibilities. One option suggested by @kylebarron would be a dataclass, e.g. :
@dataclasses.dataclass
class ByteRangeRequest:
start: int | None = 0
step: int | None = None
It would also be nice if there was an instance of this class (e.g., the default) that conveyed "fetch the whole thing", and then byte_range
wouldn't need to be optional in all the store methods. I'm also not sure we get much from None
in this type, since there are integers that can express "the end" of a range, e.g. -1
. Curious to hear other ideas here.