Skip to content

Commit 8be3876

Browse files
committed
increase coverage, one way or another
1 parent bd9afd1 commit 8be3876

File tree

2 files changed

+51
-6
lines changed

2 files changed

+51
-6
lines changed

src/zarr/core/group.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3326,7 +3326,9 @@ def _build_metadata_v3(zarr_json: dict[str, JSON]) -> ArrayV3Metadata | GroupMet
33263326
case {"node_type": "group"}:
33273327
return GroupMetadata.from_dict(zarr_json)
33283328
case _:
3329-
raise ValueError("invalid value for `node_type` key in metadata document")
3329+
raise ValueError(
3330+
"invalid value for `node_type` key in metadata document"
3331+
) # pragma: no cover
33303332

33313333

33323334
def _build_metadata_v2(
@@ -3354,7 +3356,7 @@ def _build_node_v3(
33543356
case GroupMetadata():
33553357
return AsyncGroup(metadata, store_path=store_path)
33563358
case _:
3357-
raise ValueError(f"Unexpected metadata type: {type(metadata)}")
3359+
raise ValueError(f"Unexpected metadata type: {type(metadata)}") # pragma: no cover
33583360

33593361

33603362
def _build_node_v2(
@@ -3370,7 +3372,7 @@ def _build_node_v2(
33703372
case GroupMetadata():
33713373
return AsyncGroup(metadata, store_path=store_path)
33723374
case _:
3373-
raise ValueError(f"Unexpected metadata type: {type(metadata)}")
3375+
raise ValueError(f"Unexpected metadata type: {type(metadata)}") # pragma: no cover
33743376

33753377

33763378
async def _read_node_v2(store_path: StorePath) -> AsyncArray[ArrayV2Metadata] | AsyncGroup:
@@ -3401,7 +3403,7 @@ async def _read_node(
34013403
case 3:
34023404
return await _read_node_v3(store_path=store_path)
34033405
case _:
3404-
raise ValueError(f"Unexpected zarr format: {zarr_format}")
3406+
raise ValueError(f"Unexpected zarr format: {zarr_format}") # pragma: no cover
34053407

34063408

34073409
async def _set_return_key(*, store: Store, key: str, value: Buffer, replace: bool) -> str:
@@ -3499,4 +3501,4 @@ def _create_rooted_hierarchy_sync(
34993501
elif isinstance(async_node, AsyncArray):
35003502
return Array(async_node)
35013503
else:
3502-
raise TypeError(f"Unexpected node type: {type(async_node)}")
3504+
raise TypeError(f"Unexpected node type: {type(async_node)}") # pragma: no cover

tests/test_group.py

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
ConsolidatedMetadata,
2626
GroupMetadata,
2727
_create_rooted_hierarchy,
28+
_create_rooted_hierarchy_sync,
2829
_join_paths,
2930
_normalize_path_keys,
3031
_normalize_paths,
@@ -1648,7 +1649,7 @@ async def test_create_rooted_hierarchy_group(store: Store, zarr_format, path: st
16481649

16491650
nodes_create = root_meta | groups_expected_meta | arrays_expected_meta
16501651

1651-
g = await _create_rooted_hierarchy(spath, nodes=nodes_create, overwrite=True)
1652+
g = await _create_rooted_hierarchy(spath, nodes=nodes_create)
16521653
assert g.metadata.attributes == {"path": root_key}
16531654

16541655
members = await _collect_aiterator(g.members(max_depth=None))
@@ -1660,6 +1661,48 @@ async def test_create_rooted_hierarchy_group(store: Store, zarr_format, path: st
16601661
assert members_observed_meta == members_expected_meta_relative
16611662

16621663

1664+
# TODO: simplify testing sync versions of async functions.
1665+
@pytest.mark.parametrize("store", ["memory", "local"], indirect=True)
1666+
@pytest.mark.parametrize("zarr_format", [2, 3])
1667+
@pytest.mark.parametrize("root_key", ["", "root"])
1668+
@pytest.mark.parametrize("path", ["", "foo"])
1669+
def test_create_rooted_hierarchy_sync_group(store: Store, zarr_format, path: str, root_key: str):
1670+
"""
1671+
Test that the _create_rooted_hierarchy_sync can create a group.
1672+
"""
1673+
spath = sync(make_store_path(store, path=path))
1674+
root_meta = {root_key: GroupMetadata(zarr_format=zarr_format, attributes={"path": root_key})}
1675+
group_names = ["a", "a/b"]
1676+
array_names = ["a/b/c", "a/b/d"]
1677+
1678+
# just to ensure that we don't use the same name twice in tests
1679+
assert set(group_names) & set(array_names) == set()
1680+
1681+
groups_expected_meta = {
1682+
_join_paths([root_key, node_name]): GroupMetadata(
1683+
zarr_format=zarr_format, attributes={"path": node_name}
1684+
)
1685+
for node_name in group_names
1686+
}
1687+
arrays_expected_meta = {
1688+
_join_paths([root_key, node_name]): meta_from_array(np.zeros(4), zarr_format=zarr_format)
1689+
for node_name in array_names
1690+
}
1691+
1692+
nodes_create = root_meta | groups_expected_meta | arrays_expected_meta
1693+
1694+
g = _create_rooted_hierarchy_sync(spath, nodes=nodes_create)
1695+
assert g.metadata.attributes == {"path": root_key}
1696+
1697+
members = g.members(max_depth=None)
1698+
members_observed_meta = {k: v.metadata for k, v in members}
1699+
members_expected_meta_relative = {
1700+
k.removeprefix(root_key).lstrip("/"): v
1701+
for k, v in (groups_expected_meta | arrays_expected_meta).items()
1702+
}
1703+
assert members_observed_meta == members_expected_meta_relative
1704+
1705+
16631706
@pytest.mark.parametrize("store", ["memory", "local"], indirect=True)
16641707
@pytest.mark.parametrize("zarr_format", [2, 3])
16651708
@pytest.mark.parametrize("root_key", ["", "root"])

0 commit comments

Comments
 (0)