Skip to content

Commit 333a9e3

Browse files
authored
[v3] implement / deprecate zarr.tree (#2537)
1 parent 0cca6b0 commit 333a9e3

File tree

4 files changed

+34
-8
lines changed

4 files changed

+34
-8
lines changed

src/zarr/api/asynchronous.py

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import numpy as np
99
import numpy.typing as npt
10+
from typing_extensions import deprecated
1011

1112
from zarr.core.array import Array, AsyncArray, get_array_metadata
1213
from zarr.core.buffer import NDArrayLike
@@ -493,8 +494,29 @@ async def save_group(
493494
await asyncio.gather(*aws)
494495

495496

496-
async def tree(*args: Any, **kwargs: Any) -> None:
497-
raise NotImplementedError
497+
@deprecated("Use AsyncGroup.tree instead.")
498+
async def tree(grp: AsyncGroup, expand: bool | None = None, level: int | None = None) -> Any:
499+
"""Provide a rich display of the hierarchy.
500+
501+
Parameters
502+
----------
503+
grp : Group
504+
Zarr or h5py group.
505+
expand : bool, optional
506+
Only relevant for HTML representation. If True, tree will be fully expanded.
507+
level : int, optional
508+
Maximum depth to descend into hierarchy.
509+
510+
Returns
511+
-------
512+
TreeRepr
513+
A pretty-printable object displaying the hierarchy.
514+
515+
.. deprecated:: 3.0.0
516+
`zarr.tree()` is deprecated and will be removed in a future release.
517+
Use `group.tree()` instead.
518+
"""
519+
return await grp.tree(expand=expand, level=level)
498520

499521

500522
async def array(

src/zarr/api/synchronous.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
from typing import TYPE_CHECKING, Any, Literal
44

5+
from typing_extensions import deprecated
6+
57
import zarr.api.asynchronous as async_api
68
from zarr._compat import _deprecate_positional_args
79
from zarr.core.array import Array, AsyncArray
@@ -155,8 +157,9 @@ def save_group(
155157
)
156158

157159

158-
def tree(*args: Any, **kwargs: Any) -> None:
159-
return sync(async_api.tree(*args, **kwargs))
160+
@deprecated("Use Group.tree instead.")
161+
def tree(grp: Group, expand: bool | None = None, level: int | None = None) -> Any:
162+
return sync(async_api.tree(grp._async_group, expand=expand, level=level))
160163

161164

162165
# TODO: add type annotations for kwargs

src/zarr/core/group.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1449,7 +1449,7 @@ async def tree(self, expand: bool | None = None, level: int | None = None) -> An
14491449
from zarr.core._tree import group_tree_async
14501450

14511451
if expand is not None:
1452-
raise NotImplementedError("'expanded' is not yet implemented.")
1452+
raise NotImplementedError("'expand' is not yet implemented.")
14531453
return await group_tree_async(self, max_depth=level)
14541454

14551455
async def empty(

tests/test_api.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -294,15 +294,16 @@ def test_load_array(memory_store: Store) -> None:
294294

295295

296296
def test_tree() -> None:
297+
pytest.importorskip("rich")
297298
g1 = zarr.group()
298299
g1.create_group("foo")
299300
g3 = g1.create_group("bar")
300301
g3.create_group("baz")
301302
g5 = g3.create_group("qux")
302303
g5.create_array("baz", shape=100, chunks=10)
303-
# TODO: complete after tree has been reimplemented
304-
# assert repr(zarr.tree(g1)) == repr(g1.tree())
305-
# assert str(zarr.tree(g1)) == str(g1.tree())
304+
with pytest.warns(DeprecationWarning):
305+
assert repr(zarr.tree(g1)) == repr(g1.tree())
306+
assert str(zarr.tree(g1)) == str(g1.tree())
306307

307308

308309
# @pytest.mark.parametrize("stores_from_path", [False, True])

0 commit comments

Comments
 (0)