|
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