Skip to content

Commit 4718c3c

Browse files
committed
config logger wo/breaking cli tests
1 parent 80d3473 commit 4718c3c

File tree

3 files changed

+31
-21
lines changed

3 files changed

+31
-21
lines changed

src/pms/cli.py

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,20 @@ def version_callback(value: bool):
3434
raise typer.Exit()
3535

3636

37+
def configure_logger(debug: bool):
38+
logger.enable("pms")
39+
if debug:
40+
return
41+
42+
# replace default logger handler
43+
try:
44+
logger.remove(0)
45+
except ValueError as e:
46+
logger.debug(f"no default logger handler {e}")
47+
else:
48+
logger.add(sys.stderr, level="INFO", format="<level>{message}</level>")
49+
50+
3751
@main.callback()
3852
def callback(
3953
ctx: typer.Context,
@@ -47,23 +61,13 @@ def callback(
4761
samples: Annotated[
4862
Optional[int], typer.Option("--samples", "-n", min=1, help="stop after N samples")
4963
] = None,
50-
debug: Annotated[bool, typer.Option("--debug", help="print DEBUG/logging messages")] = False,
64+
debug: Annotated[
65+
bool,
66+
typer.Option("--debug", help="print DEBUG/logging messages", callback=configure_logger),
67+
] = False,
5168
version: Annotated[bool, typer.Option("--version", "-V", callback=version_callback)] = False,
5269
):
5370
"""Data acquisition and logging for Air Quality Sensors with UART interface"""
54-
if debug:
55-
logger.enable("pms")
56-
else:
57-
logger.configure(
58-
handlers=[
59-
{
60-
"sink": sys.stderr,
61-
"format": "<level>{message}</level>",
62-
"level": "INFO",
63-
},
64-
],
65-
)
66-
6771
logger.debug(f"PyPMS v{__version__}")
6872
obj = ctx.ensure_object(dict)
6973
obj.update(reader=SensorReader(model, port, seconds, samples))

tests/conftest.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ def msg_hex(self) -> Iterator[str]:
112112
def samples(self, command: str) -> int:
113113
return len(self.value) - (command == "mqtt")
114114

115-
def options(self, command: str) -> list[str]:
115+
def options(self, command: str, *, debug: bool = False) -> list[str]:
116116
capture = f"-m {self.name} -n {self.samples(command)} -i 0"
117117
cmd = dict(
118118
serial_csv="serial -f csv",
@@ -121,7 +121,9 @@ def options(self, command: str) -> list[str]:
121121
capture=f"csv --overwrite --capture {self}_pypms.csv",
122122
decode=f"serial -f csv --decode {self}_pypms.csv",
123123
).get(command, command)
124-
return f"--debug {capture} {cmd}".split()
124+
if debug:
125+
return f"--debug {capture} {cmd}".split()
126+
return f"{capture} {cmd}".split()
125127

126128
def output(self, ending: str | None) -> str:
127129
if ending is None:

tests/test_cli.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,24 @@
1414

1515

1616
@pytest.mark.parametrize("cmd", ("--version", "-V"))
17-
def test_version(cmd: str):
17+
def test_version(cmd: str, logot: Logot):
1818
result = runner.invoke(main, cmd)
1919
assert result.exit_code == 0
2020
assert result.stdout.strip() == f"PyPMS v{__version__}"
21+
logot.assert_not_logged(logged.debug(f"PyPMS v{__version__}"))
2122

2223

23-
def test_info(capture):
24+
def test_info(capture, logot: Logot):
2425
result = runner.invoke(main, capture.options("info"))
2526
assert result.exit_code == 0
2627
assert dedent(result.stdout).strip() == capture.output("info").strip()
28+
logot.assert_logged(logged.debug(f"PyPMS v{__version__}"))
2729

2830

2931
@pytest.mark.parametrize("format", (None, "csv", "hexdump"))
3032
def test_serial(capture, format: str | None, logot: Logot):
3133
cmd = "serial" if format is None else f"serial_{format}"
32-
result = runner.invoke(main, capture.options(cmd))
34+
result = runner.invoke(main, capture.options(cmd, debug=True))
3335
assert result.exit_code == 0
3436
assert result.stdout == capture.output(format)
3537

@@ -38,7 +40,7 @@ def test_serial(capture, format: str | None, logot: Logot):
3840

3941

4042
def test_csv(capture, logot: Logot):
41-
result = runner.invoke(main, capture.options("csv"))
43+
result = runner.invoke(main, capture.options("csv", debug=True))
4244
assert result.exit_code == 0
4345

4446
csv = Path(capture.options("csv")[-1])
@@ -53,10 +55,12 @@ def test_csv(capture, logot: Logot):
5355
def test_capture_decode(capture, logot: Logot):
5456
result = runner.invoke(main, capture.options("capture"))
5557
assert result.exit_code == 0
56-
5758
csv = Path(capture.options("capture")[-1])
5859
assert csv.exists()
5960

61+
for msg in capture.debug_messages("capture"):
62+
logot.assert_logged(logged.debug(msg))
63+
6064
result = runner.invoke(main, capture.options("decode"))
6165
assert result.exit_code == 0
6266
csv.unlink()

0 commit comments

Comments
 (0)