Skip to content

Commit fb6752d

Browse files
committed
fixups
1 parent 88afe52 commit fb6752d

File tree

6 files changed

+31
-18
lines changed

6 files changed

+31
-18
lines changed

src/zarr/core/array.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2385,8 +2385,18 @@ def chunks_initialized(array: Array | AsyncArray) -> tuple[str, ...]:
23852385
def _build_parents(node: AsyncArray | AsyncGroup) -> list[AsyncGroup]:
23862386
from zarr.core.group import AsyncGroup, GroupMetadata
23872387

2388-
required_parts = node.store_path.path.split("/")[:-1]
2389-
parents = []
2388+
print("path", node.store_path.path)
2389+
2390+
if "/" in node.store_path.path:
2391+
required_parts = node.store_path.path.split("/")[:-1]
2392+
else:
2393+
required_parts = []
2394+
parents = [
2395+
AsyncGroup(
2396+
metadata=GroupMetadata(zarr_format=node.metadata.zarr_format),
2397+
store_path=StorePath(store=node.store_path.store, path=""),
2398+
)
2399+
]
23902400

23912401
for i, part in enumerate(required_parts):
23922402
path = "/".join(required_parts[:i] + [part])

src/zarr/core/group.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -700,6 +700,10 @@ async def _members(
700700
"Object at %s is not recognized as a component of a Zarr hierarchy.", key
701701
)
702702

703+
async def keys(self) -> AsyncGenerator[str, None]:
704+
async for key, _ in self.members():
705+
yield key
706+
703707
async def contains(self, member: str) -> bool:
704708
# TODO: this can be made more efficient.
705709
try:
@@ -823,10 +827,10 @@ def __delitem__(self, key: str) -> None:
823827
self._sync(self._async_group.delitem(key))
824828

825829
def __iter__(self) -> Iterator[str]:
826-
raise NotImplementedError
830+
yield from self.keys()
827831

828832
def __len__(self) -> int:
829-
raise NotImplementedError
833+
return self.nmembers()
830834

831835
def __setitem__(self, key: str, value: Any) -> None:
832836
"""__setitem__ is not supported in v3"""
@@ -906,6 +910,9 @@ def members(self, max_depth: int | None = 0) -> tuple[tuple[str, Array | Group],
906910

907911
return tuple((kv[0], _parse_async_node(kv[1])) for kv in _members)
908912

913+
def keys(self) -> Generator[str, None]:
914+
yield from self._sync_iter(self._async_group.keys())
915+
909916
def __contains__(self, member: str) -> bool:
910917
return self._sync(self._async_group.contains(member))
911918

src/zarr/storage/logging.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,9 +150,9 @@ async def set(self, key: str, value: Buffer) -> None:
150150
with self.log():
151151
return await self._store.set(key=key, value=value)
152152

153-
async def set_if_not_exists(self, key: str, default: Buffer) -> None:
153+
async def set_if_not_exists(self, key: str, value: Buffer) -> None:
154154
with self.log():
155-
return await self._store.set_if_not_exists(key=key, value=default)
155+
return await self._store.set_if_not_exists(key=key, value=value)
156156

157157
async def delete(self, key: str) -> None:
158158
with self.log():

src/zarr/storage/memory.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,10 +101,10 @@ async def set(self, key: str, value: Buffer, byte_range: tuple[int, int] | None
101101
else:
102102
self._store_dict[key] = value
103103

104-
async def set_if_not_exists(self, key: str, default: Buffer) -> None:
104+
async def set_if_not_exists(self, key: str, value: Buffer) -> None:
105105
self._check_writable()
106106
await self._ensure_open()
107-
self._store_dict.setdefault(key, default)
107+
self._store_dict.setdefault(key, value)
108108

109109
async def delete(self, key: str) -> None:
110110
self._check_writable()

tests/v3/test_array.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,10 +92,9 @@ async def test_create_creates_parents(
9292
expected = [f"{part}/{file}" for file in files for part in parts]
9393

9494
if zarr_format == 2:
95-
expected.append("a/b/c/d/.zarray")
96-
expected.append("a/b/c/d/.zattrs")
95+
expected.extend([".zattrs", ".zgroup", "a/b/c/d/.zarray", "a/b/c/d/.zattrs"])
9796
else:
98-
expected.append("a/b/c/d/zarr.json")
97+
expected.extend(["zarr.json", "a/b/c/d/zarr.json"])
9998

10099
expected = sorted(expected)
101100

tests/v3/test_group.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,9 @@ async def test_create_creates_parents(store: Store, zarr_format: ZarrFormat) ->
7474
expected = [f"{part}/{file}" for file in files for part in parts]
7575

7676
if zarr_format == 2:
77-
expected.append("a/b/c/d/.zgroup")
78-
expected.append("a/b/c/d/.zattrs")
77+
expected.extend([".zgroup", ".zattrs", "a/b/c/d/.zgroup", "a/b/c/d/.zattrs"])
7978
else:
80-
expected.append("a/b/c/d/zarr.json")
79+
expected.extend(["zarr.json", "a/b/c/d/zarr.json"])
8180

8281
expected = sorted(expected)
8382

@@ -311,8 +310,7 @@ def test_group_iter(store: Store, zarr_format: ZarrFormat) -> None:
311310
"""
312311

313312
group = Group.from_store(store, zarr_format=zarr_format)
314-
with pytest.raises(NotImplementedError):
315-
list(group)
313+
assert list(group) == []
316314

317315

318316
def test_group_len(store: Store, zarr_format: ZarrFormat) -> None:
@@ -321,8 +319,7 @@ def test_group_len(store: Store, zarr_format: ZarrFormat) -> None:
321319
"""
322320

323321
group = Group.from_store(store, zarr_format=zarr_format)
324-
with pytest.raises(NotImplementedError):
325-
len(group)
322+
assert len(group) == 0
326323

327324

328325
def test_group_setitem(store: Store, zarr_format: ZarrFormat) -> None:

0 commit comments

Comments
 (0)