Skip to content

Commit 9fb8a33

Browse files
committed
single-item tuple for compressors in v2
1 parent 2aa3acc commit 9fb8a33

File tree

2 files changed

+7
-1
lines changed

2 files changed

+7
-1
lines changed

src/zarr/core/array.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3816,10 +3816,12 @@ def _parse_chunk_encoding_v2(
38163816
_filters: tuple[numcodecs.abc.Codec, ...] | None
38173817
_compressor: numcodecs.abc.Codec | None
38183818

3819-
if compressor is None:
3819+
if compressor is None or compressor == ():
38203820
_compressor = None
38213821
elif compressor == "auto":
38223822
_compressor = default_compressor
3823+
elif isinstance(compressor, tuple | list) and len(compressor) == 1:
3824+
_compressor = parse_compressor(compressor[0])
38233825
else:
38243826
if isinstance(compressor, Iterable) and not isinstance(compressor, dict):
38253827
msg = f"For Zarr v2 arrays, the `compressor` must be a single codec. Got an iterable with type {type(compressor)} instead."

tests/test_array.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -985,7 +985,9 @@ async def test_create_array_no_filters_compressors(
985985
compressors=empty_value,
986986
filters=empty_value,
987987
)
988+
# The v2 metadata stores None and () separately
988989
assert arr.metadata.filters == empty_value # type: ignore[union-attr]
990+
# The v2 metadata does not allow tuple for compressor, therefore it is turned into None
989991
assert arr.metadata.compressor is None # type: ignore[union-attr]
990992

991993
# v3
@@ -1081,6 +1083,8 @@ async def test_create_array_v3_chunk_encoding(
10811083
"auto",
10821084
None,
10831085
numcodecs.Zstd(level=3),
1086+
(),
1087+
(numcodecs.Zstd(level=3),),
10841088
],
10851089
)
10861090
@pytest.mark.parametrize(

0 commit comments

Comments
 (0)