Skip to content

Commit e2ff9c9

Browse files
committed
use registry for getting codec class
1 parent c84d2c1 commit e2ff9c9

1 file changed

Lines changed: 9 additions & 15 deletions

File tree

src/zarr/registry.py

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -169,22 +169,16 @@ def _resolve_codec(data: dict[str, JSON]) -> Codec:
169169

170170

171171
def numcodec_to_zarr3_codec(codec: numcodecs.abc.Codec) -> Codec:
172-
import numcodecs.zarr3
173-
174-
codec_name = codec.__class__.__name__
175-
numcodecs_zarr3_module = numcodecs.zarr3
176-
177-
if not hasattr(numcodecs_zarr3_module, codec_name):
178-
raise ValueError(f"No Zarr3 wrapper found for numcodec: {codec_name}")
179-
180-
numcodecs_zarr3_codec_class = getattr(numcodecs_zarr3_module, codec_name)
181-
182172
codec_config = codec.get_config()
183-
codec_config.pop("id", None)
184-
185-
codec = numcodecs_zarr3_codec_class(**codec_config)
186-
assert isinstance(codec, Codec)
187-
return codec
173+
codec_name = codec_config.pop("id", None)
174+
if codec_name is None:
175+
raise ValueError(f"Codec configuration does not contain 'id': {codec_config}")
176+
codec_cls = get_codec_class(f"numcodecs.{codec_name}")
177+
if codec_cls is None:
178+
raise ValueError(f"Codec class for 'numcodecs.{codec_name}' not found.")
179+
codec_v3 = codec_cls.from_dict({"name": f"numcodecs.{codec_name}", "configuration": codec_config})
180+
assert isinstance(codec_v3, Codec)
181+
return codec_v3
188182

189183

190184
def _parse_bytes_bytes_codec(data: dict[str, JSON] | Codec) -> BytesBytesCodec:

0 commit comments

Comments
 (0)