|
33 | 33 | from zarr.store.common import ensure_no_existing_node
|
34 | 34 |
|
35 | 35 | if TYPE_CHECKING:
|
36 |
| - from collections.abc import AsyncGenerator, Iterable, Iterator |
| 36 | + from collections.abc import AsyncGenerator, Generator, Iterable, Iterator |
37 | 37 | from typing import Any
|
38 | 38 |
|
39 | 39 | from zarr.abc.codec import Codec
|
@@ -678,29 +678,31 @@ async def contains(self, member: str) -> bool:
|
678 | 678 | else:
|
679 | 679 | return True
|
680 | 680 |
|
681 |
| - # todo: decide if this method should be separate from `groups` |
682 |
| - async def group_keys(self) -> AsyncGenerator[str, None]: |
683 |
| - async for key, value in self.members(): |
| 681 | + async def groups(self) -> AsyncGenerator[tuple[str, AsyncGroup], None]: |
| 682 | + async for name, value in self.members(): |
684 | 683 | if isinstance(value, AsyncGroup):
|
685 |
| - yield key |
| 684 | + yield name, value |
686 | 685 |
|
687 |
| - # todo: decide if this method should be separate from `group_keys` |
688 |
| - async def groups(self) -> AsyncGenerator[AsyncGroup, None]: |
689 |
| - async for _, value in self.members(): |
690 |
| - if isinstance(value, AsyncGroup): |
691 |
| - yield value |
| 686 | + async def group_keys(self) -> AsyncGenerator[str, None]: |
| 687 | + async for key, _ in self.groups(): |
| 688 | + yield key |
692 | 689 |
|
693 |
| - # todo: decide if this method should be separate from `arrays` |
694 |
| - async def array_keys(self) -> AsyncGenerator[str, None]: |
| 690 | + async def group_values(self) -> AsyncGenerator[AsyncGroup, None]: |
| 691 | + async for _, group in self.groups(): |
| 692 | + yield group |
| 693 | + |
| 694 | + async def arrays(self) -> AsyncGenerator[tuple[str, AsyncArray], None]: |
695 | 695 | async for key, value in self.members():
|
696 | 696 | if isinstance(value, AsyncArray):
|
697 |
| - yield key |
| 697 | + yield key, value |
698 | 698 |
|
699 |
| - # todo: decide if this method should be separate from `array_keys` |
700 |
| - async def arrays(self) -> AsyncGenerator[AsyncArray, None]: |
701 |
| - async for _, value in self.members(): |
702 |
| - if isinstance(value, AsyncArray): |
703 |
| - yield value |
| 699 | + async def array_keys(self) -> AsyncGenerator[str, None]: |
| 700 | + async for key, _ in self.arrays(): |
| 701 | + yield key |
| 702 | + |
| 703 | + async def array_values(self) -> AsyncGenerator[AsyncArray, None]: |
| 704 | + async for _, array in self.arrays(): |
| 705 | + yield array |
704 | 706 |
|
705 | 707 | async def tree(self, expand: bool = False, level: int | None = None) -> Any:
|
706 | 708 | raise NotImplementedError
|
@@ -861,18 +863,29 @@ def members(self, max_depth: int | None = 0) -> tuple[tuple[str, Array | Group],
|
861 | 863 | def __contains__(self, member: str) -> bool:
|
862 | 864 | return self._sync(self._async_group.contains(member))
|
863 | 865 |
|
864 |
| - def group_keys(self) -> tuple[str, ...]: |
865 |
| - return tuple(self._sync_iter(self._async_group.group_keys())) |
| 866 | + def groups(self) -> Generator[tuple[str, Group], None]: |
| 867 | + for name, async_group in self._sync_iter(self._async_group.groups()): |
| 868 | + yield name, Group(async_group) |
| 869 | + |
| 870 | + def group_keys(self) -> Generator[str, None]: |
| 871 | + for name, _ in self.groups(): |
| 872 | + yield name |
| 873 | + |
| 874 | + def group_values(self) -> Generator[Group, None]: |
| 875 | + for _, group in self.groups(): |
| 876 | + yield group |
866 | 877 |
|
867 |
| - def groups(self) -> tuple[Group, ...]: |
868 |
| - # TODO: in v2 this was a generator that return key: Group |
869 |
| - return tuple(Group(obj) for obj in self._sync_iter(self._async_group.groups())) |
| 878 | + def arrays(self) -> Generator[tuple[str, Array], None]: |
| 879 | + for name, async_array in self._sync_iter(self._async_group.arrays()): |
| 880 | + yield name, Array(async_array) |
870 | 881 |
|
871 |
| - def array_keys(self) -> tuple[str, ...]: |
872 |
| - return tuple(self._sync_iter(self._async_group.array_keys())) |
| 882 | + def array_keys(self) -> Generator[str, None]: |
| 883 | + for name, _ in self.arrays(): |
| 884 | + yield name |
873 | 885 |
|
874 |
| - def arrays(self) -> tuple[Array, ...]: |
875 |
| - return tuple(Array(obj) for obj in self._sync_iter(self._async_group.arrays())) |
| 886 | + def array_values(self) -> Generator[Array, None]: |
| 887 | + for _, array in self.arrays(): |
| 888 | + yield array |
876 | 889 |
|
877 | 890 | def tree(self, expand: bool = False, level: int | None = None) -> Any:
|
878 | 891 | return self._sync(self._async_group.tree(expand=expand, level=level))
|
|
0 commit comments