Skip to content

Commit 7154260

Browse files
committed
fix: ensure ZipStore is open before acquiring lock
1 parent edd47db commit 7154260

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

src/zarr/storage/_zip.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,12 +120,18 @@ def __setstate__(self, state: dict[str, Any]) -> None:
120120

121121
def close(self) -> None:
122122
# docstring inherited
123+
if not self._is_open:
124+
self._sync_open()
125+
123126
super().close()
124127
with self._lock:
125128
self._zf.close()
126129

127130
async def clear(self) -> None:
128131
# docstring inherited
132+
if not self._is_open:
133+
self._sync_open()
134+
129135
with self._lock:
130136
self._check_writable()
131137
self._zf.close()
@@ -188,6 +194,8 @@ async def get_partial_values(
188194
key_ranges: Iterable[tuple[str, ByteRequest | None]],
189195
) -> list[Buffer | None]:
190196
# docstring inherited
197+
if not self._is_open:
198+
self._sync_open()
191199
out = []
192200
with self._lock:
193201
for key, byte_range in key_ranges:
@@ -222,6 +230,9 @@ async def set(self, key: str, value: Buffer) -> None:
222230

223231
async def set_if_not_exists(self, key: str, value: Buffer) -> None:
224232
self._check_writable()
233+
if not self._is_open:
234+
self._sync_open()
235+
225236
with self._lock:
226237
members = self._zf.namelist()
227238
if key not in members:
@@ -245,6 +256,9 @@ async def delete(self, key: str) -> None:
245256

246257
async def exists(self, key: str) -> bool:
247258
# docstring inherited
259+
if not self._is_open:
260+
self._sync_open()
261+
248262
with self._lock:
249263
try:
250264
self._zf.getinfo(key)
@@ -255,6 +269,9 @@ async def exists(self, key: str) -> bool:
255269

256270
async def list(self) -> AsyncIterator[str]:
257271
# docstring inherited
272+
if not self._is_open:
273+
self._sync_open()
274+
258275
with self._lock:
259276
for key in self._zf.namelist():
260277
yield key

0 commit comments

Comments
 (0)