|
4 | 4 | import json
|
5 | 5 | import logging
|
6 | 6 | from dataclasses import asdict, dataclass, field, fields, replace
|
7 |
| -from typing import TYPE_CHECKING, Literal, cast, overload |
| 7 | +from typing import TYPE_CHECKING, Literal, TypeVar, cast, overload |
8 | 8 |
|
9 | 9 | import numpy as np
|
10 | 10 | import numpy.typing as npt
|
|
42 | 42 |
|
43 | 43 | logger = logging.getLogger("zarr.group")
|
44 | 44 |
|
| 45 | +DefaultT = TypeVar("DefaultT") |
| 46 | + |
45 | 47 |
|
46 | 48 | def parse_zarr_format(data: Any) -> ZarrFormat:
|
47 | 49 | if data in (2, 3):
|
@@ -290,6 +292,28 @@ async def delitem(self, key: str) -> None:
|
290 | 292 | else:
|
291 | 293 | raise ValueError(f"unexpected zarr_format: {self.metadata.zarr_format}")
|
292 | 294 |
|
| 295 | + async def get( |
| 296 | + self, key: str, default: DefaultT | None = None |
| 297 | + ) -> AsyncArray | AsyncGroup | DefaultT | None: |
| 298 | + """Obtain a group member, returning default if not found. |
| 299 | +
|
| 300 | + Parameters |
| 301 | + ---------- |
| 302 | + key : string |
| 303 | + Group member name. |
| 304 | + default : object |
| 305 | + Default value to return if key is not found (default: None). |
| 306 | +
|
| 307 | + Returns |
| 308 | + ------- |
| 309 | + object |
| 310 | + Group member (AsyncArray or AsyncGroup) or default if not found. |
| 311 | + """ |
| 312 | + try: |
| 313 | + return await self.getitem(key) |
| 314 | + except KeyError: |
| 315 | + return default |
| 316 | + |
293 | 317 | async def _save_metadata(self, ensure_parents: bool = False) -> None:
|
294 | 318 | to_save = self.metadata.to_buffer_dict(default_buffer_prototype())
|
295 | 319 | awaitables = [set_or_delete(self.store_path / key, value) for key, value in to_save.items()]
|
@@ -828,6 +852,26 @@ def __getitem__(self, path: str) -> Array | Group:
|
828 | 852 | else:
|
829 | 853 | return Group(obj)
|
830 | 854 |
|
| 855 | + def get(self, path: str, default: DefaultT | None = None) -> Array | Group | DefaultT | None: |
| 856 | + """Obtain a group member, returning default if not found. |
| 857 | +
|
| 858 | + Parameters |
| 859 | + ---------- |
| 860 | + key : string |
| 861 | + Group member name. |
| 862 | + default : object |
| 863 | + Default value to return if key is not found (default: None). |
| 864 | +
|
| 865 | + Returns |
| 866 | + ------- |
| 867 | + object |
| 868 | + Group member (Array or Group) or default if not found. |
| 869 | + """ |
| 870 | + try: |
| 871 | + return self[path] |
| 872 | + except KeyError: |
| 873 | + return default |
| 874 | + |
831 | 875 | def __delitem__(self, key: str) -> None:
|
832 | 876 | self._sync(self._async_group.delitem(key))
|
833 | 877 |
|
|
0 commit comments