Skip to content

Commit 1fe910d

Browse files
committed
Fix typing in test_logging
1 parent 9efebe3 commit 1fe910d

File tree

2 files changed

+29
-22
lines changed

2 files changed

+29
-22
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,14 +354,14 @@ module = [
354354
"tests.test_codecs.test_codecs",
355355
"tests.test_metadata.*",
356356
"tests.test_store.test_core",
357+
"tests.test_store.test_logging",
357358
]
358359
strict = false
359360

360361
# TODO: Move the next modules up to the strict = false section
361362
# and fix the errors
362363
[[tool.mypy.overrides]]
363364
module = [
364-
"tests.test_store.test_logging",
365365
"tests.test_store.test_object",
366366
"tests.test_store.test_stateful",
367367
"tests.test_store.test_wrapper",

tests/test_store/test_logging.py

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from __future__ import annotations
22

33
import logging
4-
from typing import TYPE_CHECKING
4+
from typing import TYPE_CHECKING, TypedDict
55

66
import pytest
77

@@ -11,60 +11,67 @@
1111
from zarr.testing.store import StoreTests
1212

1313
if TYPE_CHECKING:
14-
from _pytest.compat import LEGACY_PATH
14+
from pathlib import Path
1515

1616
from zarr.abc.store import Store
1717

1818

19-
class TestLoggingStore(StoreTests[LoggingStore, cpu.Buffer]):
20-
store_cls = LoggingStore
19+
class StoreKwargs(TypedDict):
20+
store: LocalStore
21+
log_level: str
22+
23+
24+
class TestLoggingStore(StoreTests[LoggingStore[LocalStore], cpu.Buffer]):
25+
store_cls = LoggingStore[LocalStore]
2126
buffer_cls = cpu.Buffer
2227

23-
async def get(self, store: LoggingStore, key: str) -> Buffer:
28+
async def get(self, store: LoggingStore[LocalStore], key: str) -> Buffer:
2429
return self.buffer_cls.from_bytes((store._store.root / key).read_bytes())
2530

26-
async def set(self, store: LoggingStore, key: str, value: Buffer) -> None:
31+
async def set(self, store: LoggingStore[LocalStore], key: str, value: Buffer) -> None:
2732
parent = (store._store.root / key).parent
2833
if not parent.exists():
2934
parent.mkdir(parents=True)
3035
(store._store.root / key).write_bytes(value.to_bytes())
3136

3237
@pytest.fixture
33-
def store_kwargs(self, tmpdir: LEGACY_PATH) -> dict[str, str]:
34-
return {"store": LocalStore(str(tmpdir)), "log_level": "DEBUG"}
38+
def store_kwargs(self, tmp_path: Path) -> StoreKwargs:
39+
return {"store": LocalStore(str(tmp_path)), "log_level": "DEBUG"}
3540

3641
@pytest.fixture
37-
def open_kwargs(self, tmpdir) -> dict[str, str]:
38-
return {"store_cls": LocalStore, "root": str(tmpdir), "log_level": "DEBUG"}
42+
def open_kwargs(self, tmp_path: Path) -> dict[str, type[LocalStore] | str]:
43+
return {"store_cls": LocalStore, "root": str(tmp_path), "log_level": "DEBUG"}
3944

4045
@pytest.fixture
41-
def store(self, store_kwargs: str | dict[str, Buffer] | None) -> LoggingStore:
46+
def store(self, store_kwargs: StoreKwargs) -> LoggingStore[LocalStore]:
4247
return self.store_cls(**store_kwargs)
4348

44-
def test_store_supports_writes(self, store: LoggingStore) -> None:
49+
def test_store_supports_writes(self, store: LoggingStore[LocalStore]) -> None:
4550
assert store.supports_writes
4651

47-
def test_store_supports_partial_writes(self, store: LoggingStore) -> None:
52+
def test_store_supports_partial_writes(self, store: LoggingStore[LocalStore]) -> None:
4853
assert store.supports_partial_writes
4954

50-
def test_store_supports_listing(self, store: LoggingStore) -> None:
55+
def test_store_supports_listing(self, store: LoggingStore[LocalStore]) -> None:
5156
assert store.supports_listing
5257

53-
def test_store_repr(self, store: LoggingStore) -> None:
58+
def test_store_repr(self, store: LoggingStore[LocalStore]) -> None:
5459
assert f"{store!r}" == f"LoggingStore(LocalStore, 'file://{store._store.root.as_posix()}')"
5560

56-
def test_store_str(self, store: LoggingStore) -> None:
61+
def test_store_str(self, store: LoggingStore[LocalStore]) -> None:
5762
assert str(store) == f"logging-file://{store._store.root.as_posix()}"
5863

59-
async def test_default_handler(self, local_store, capsys) -> None:
64+
async def test_default_handler(
65+
self, local_store: LocalStore, capsys: pytest.CaptureFixture[str]
66+
) -> None:
6067
# Store and then remove existing handlers to enter default handler code path
6168
handlers = logging.getLogger().handlers[:]
6269
for h in handlers:
6370
logging.getLogger().removeHandler(h)
6471
# Test logs are sent to stdout
6572
wrapped = LoggingStore(store=local_store)
6673
buffer = default_buffer_prototype().buffer
67-
res = await wrapped.set("foo/bar/c/0", buffer.from_bytes(b"\x01\x02\x03\x04"))
74+
res = await wrapped.set("foo/bar/c/0", buffer.from_bytes(b"\x01\x02\x03\x04")) # type: ignore[func-returns-value]
6875
assert res is None
6976
captured = capsys.readouterr()
7077
assert len(captured) == 2
@@ -74,7 +81,7 @@ async def test_default_handler(self, local_store, capsys) -> None:
7481
for h in handlers:
7582
logging.getLogger().addHandler(h)
7683

77-
def test_is_open_setter_raises(self, store: LoggingStore) -> None:
84+
def test_is_open_setter_raises(self, store: LoggingStore[LocalStore]) -> None:
7885
"Test that a user cannot change `_is_open` without opening the underlying store."
7986
with pytest.raises(
8087
NotImplementedError, match="LoggingStore must be opened via the `_open` method"
@@ -83,12 +90,12 @@ def test_is_open_setter_raises(self, store: LoggingStore) -> None:
8390

8491

8592
@pytest.mark.parametrize("store", ["local", "memory", "zip"], indirect=["store"])
86-
async def test_logging_store(store: Store, caplog) -> None:
93+
async def test_logging_store(store: Store, caplog: pytest.LogCaptureFixture) -> None:
8794
wrapped = LoggingStore(store=store, log_level="DEBUG")
8895
buffer = default_buffer_prototype().buffer
8996

9097
caplog.clear()
91-
res = await wrapped.set("foo/bar/c/0", buffer.from_bytes(b"\x01\x02\x03\x04"))
98+
res = await wrapped.set("foo/bar/c/0", buffer.from_bytes(b"\x01\x02\x03\x04")) # type: ignore[func-returns-value]
9299
assert res is None
93100
assert len(caplog.record_tuples) == 2
94101
for tup in caplog.record_tuples:

0 commit comments

Comments
 (0)