zarr-developers / zarr-python

An implementation of chunked, compressed, N-dimensional arrays for Python.
https://zarr.readthedocs.io
MIT License
1.48k stars 274 forks source link

Zarr v3.0.0a7 fail to open group dataset #2309

Open Czaki opened 18 hours ago

Czaki commented 18 hours ago

Zarr version

3.0.0a7

Numcodecs version

0.13.0

Python Version

3.12

Operating System

All

Installation

pip install --pre

Description

When open zarr dataset using image = zarr.open(store=path) ends with error ValueError: Invalid value. Expected 'array'. Got group.

This guard is expecting key error, not value error:

https://github.com/zarr-developers/zarr-python/blob/c258b275d717106be6cdbe403e585fe03f67961e/src/zarr/api/asynchronous.py#L248-L251

napari_builtins/_tests/test_io.py:121:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
napari_builtins/io/_read.py:225: in magic_imread
    image, zarr_shape = read_zarr_dataset(filename)
napari_builtins/io/_read.py:140: in read_zarr_dataset
    image = zarr.open(store=path)
/tmp/.tox/py312-linux-pyqt5-no_cov/lib/python3.12/site-packages/zarr/_compat.py:43: in inner_f
    return f(*args, **kwargs)
/tmp/.tox/py312-linux-pyqt5-no_cov/lib/python3.12/site-packages/zarr/api/synchronous.py:77: in open
    obj = sync(
/tmp/.tox/py312-linux-pyqt5-no_cov/lib/python3.12/site-packages/zarr/core/sync.py:91: in sync
    raise return_result
/tmp/.tox/py312-linux-pyqt5-no_cov/lib/python3.12/site-packages/zarr/core/sync.py:50: in _runner
    return await coro
/tmp/.tox/py312-linux-pyqt5-no_cov/lib/python3.12/site-packages/zarr/api/asynchronous.py:249: in open
    return await open_array(store=store_path, zarr_format=zarr_format, **kwargs)
/tmp/.tox/py312-linux-pyqt5-no_cov/lib/python3.12/site-packages/zarr/api/asynchronous.py:966: in open_array
    return await AsyncArray.open(store_path, zarr_format=zarr_format)
/tmp/.tox/py312-linux-pyqt5-no_cov/lib/python3.12/site-packages/zarr/core/array.py:405: in open
    return cls(store_path=store_path, metadata=metadata_dict)
/tmp/.tox/py312-linux-pyqt5-no_cov/lib/python3.12/site-packages/zarr/core/array.py:181: in __init__
    metadata = ArrayV3Metadata.from_dict(metadata)
/tmp/.tox/py312-linux-pyqt5-no_cov/lib/python3.12/site-packages/zarr/core/metadata/v3.py:270: in from_dict
    _ = parse_node_type_array(_data.pop("node_type"))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

data = 'group'

    def parse_node_type_array(data: object) -> Literal["array"]:
        if data == "array":
            return "array"
>       raise ValueError(f"Invalid value. Expected 'array'. Got {data}.")
E       ValueError: Invalid value. Expected 'array'. Got group.

/tmp/.tox/py312-linux-pyqt5-no_cov/lib/python3.12/site-packages/zarr/core/metadata/v3.py:45: ValueError

Steps to reproduce

Run test_zarr_multiscale from napari_builtins/_tests/test_io.py

Additional output

followup to #2158

required for https://github.com/napari/napari/pull/7215

TomAugspurger commented 10 hours ago

Thanks for the report. https://github.com/zarr-developers/zarr-python/pull/2310 has a quick fix for this.