Skip to content

Commit eba4a8f

Browse files
committed
show __init_subclass__ can work for Zlib
1 parent 83826c0 commit eba4a8f

File tree

1 file changed

+15
-5
lines changed

1 file changed

+15
-5
lines changed

numcodecs/zarr3.py

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,24 @@ def _parse_codec_configuration(data: dict[str, JSON]) -> dict[str, JSON]:
7474
return {"id": id, **parsed_configuration}
7575

7676

77+
def snake_case(codec_name: str) -> str:
78+
# TODO the Jenkins codec is a special case because it inserts an _
79+
return codec_name.lower()
80+
81+
7782
@dataclass(frozen=True)
7883
class _NumcodecsCodec(Metadata):
7984
codec_name: str
8085
codec_config: dict[str, JSON]
8186

87+
def __init_subclass__(cls, *, codec_name: str | None = None, **kwargs):
88+
super().__init_subclass__(**kwargs)
89+
if codec_name is not None:
90+
cls.codec_name = CODEC_PREFIX + codec_name
91+
cls.__doc__ = f"""
92+
See :class:`{snake_case(cls.codec_name)}.{codec_name}` for more details and parameters.
93+
"""
94+
8295
def __init__(self, **codec_config: JSON) -> None:
8396
if not self.codec_name:
8497
raise ValueError(
@@ -260,11 +273,8 @@ def compute_encoded_size(self, input_byte_length: int, chunk_spec: ArraySpec) ->
260273

261274

262275
#Zlib = _add_docstring(_make_bytes_bytes_codec("zlib", "Zlib"), "numcodecs.zlib.Zlib")
263-
class Zlib(_NumcodecsBytesBytesCodec):
264-
codec_name = CODEC_PREFIX + "zlib"
265-
266-
def __init__(self, **codec_config: JSON) -> None:
267-
super().__init__(**codec_config)
276+
class Zlib(_NumcodecsBytesBytesCodec, codec_name="Zlib"):
277+
pass
268278

269279

270280
GZip = _add_docstring(_make_bytes_bytes_codec("gzip", "GZip"), "numcodecs.gzip.GZip")

0 commit comments

Comments
 (0)