Skip to content

Commit

Permalink
Add eventkit error handlers (#752)
Browse files Browse the repository at this point in the history
  • Loading branch information
dycw authored Sep 19, 2024
1 parent af95a8a commit ba07a6f
Show file tree
Hide file tree
Showing 8 changed files with 183 additions and 27 deletions.
46 changes: 37 additions & 9 deletions src/tests/test_eventkit.py
Original file line number Diff line number Diff line change
@@ -1,30 +1,58 @@
from __future__ import annotations

from typing import TYPE_CHECKING, TypeVar
import sys # do use `from sys import ...`
from re import search
from typing import TYPE_CHECKING, Any, ClassVar, cast

from eventkit import Event
from hypothesis import HealthCheck, given, settings
from hypothesis.strategies import integers
from loguru import logger
from pytest import CaptureFixture

from tests.test_loguru_functions import func_test_eventkit
from utilities.eventkit import add_listener
from utilities.functions import identity
from utilities.loguru import HandlerConfiguration, LogLevel

if TYPE_CHECKING:
from pytest import CaptureFixture

_T = TypeVar("_T")


class TestAddListener:
datetime: ClassVar[str] = r"^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} \| "

@given(n=integers())
@settings(suppress_health_check={HealthCheck.function_scoped_fixture})
async def test_main(self, *, capsys: CaptureFixture, n: int) -> None:
def func(obj: _T, /) -> _T:
print(obj) # noqa: T201
return identity(obj)
handler: HandlerConfiguration = {"sink": sys.stdout, "level": LogLevel.TRACE}
_ = logger.configure(handlers=[cast(dict[str, Any], handler)])

event = Event()
_ = add_listener(event, func)
_ = add_listener(event, func_test_eventkit)
event.emit(n)
out = capsys.readouterr().out
assert out == f"{n}\n"
(line,) = out.splitlines()
expected = (
self.datetime
+ r"TRACE \| tests\.test_loguru_functions:func_test_eventkit:\d+ - n=-?\d+$"
)
assert search(expected, line), line

@given(n=integers())
@settings(suppress_health_check={HealthCheck.function_scoped_fixture})
async def test_error(self, *, capsys: CaptureFixture, n: int) -> None:
handler: HandlerConfiguration = {"sink": sys.stdout, "level": LogLevel.TRACE}
_ = logger.configure(handlers=[cast(dict[str, Any], handler)])

event = Event()
_ = add_listener(event, func_test_eventkit)
event.emit(n, n)
out = capsys.readouterr().out
(line1, line2, *_, last) = out.splitlines()
expected1 = r"ERROR \| utilities\.eventkit:_add_listener_error:\d+ - Error running Event<.*>$"
assert search(expected1, line1), line1
assert line2 == "Traceback (most recent call last):"
assert (
last
== "TypeError: func_test_eventkit() takes 1 positional argument but 2 were given"
)
4 changes: 2 additions & 2 deletions src/tests/test_loguru.py
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ def test_main(self, *, capsys: CaptureFixture) -> None:

logger.trace("message 2")
out2 = capsys.readouterr().out
expected = r"\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} \| TRACE \| tests\.test_loguru:test_main:\d+ - message 2"
expected = r"^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} \| TRACE \| tests\.test_loguru:test_main:\d+ - message 2$"
assert search(expected, out2), out2


Expand Down Expand Up @@ -167,7 +167,7 @@ def test_main(self, *, capsys: CaptureFixture) -> None:


class TestLog:
datetime: ClassVar[str] = r"\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} \| "
datetime: ClassVar[str] = r"^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} \| "
loguru: ClassVar[str] = r"tests\.test_loguru_functions:"
trace: ClassVar[str] = datetime + r"TRACE \| " + loguru
debug: ClassVar[str] = datetime + r"DEBUG \| " + loguru
Expand Down
13 changes: 13 additions & 0 deletions src/tests/test_loguru_functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,21 @@

from time import sleep

from loguru import logger
from tenacity import retry, wait_fixed

from utilities.loguru import LogLevel, log
from utilities.tenacity import before_sleep_log

# eventkit


def func_test_eventkit(n: int, /) -> None:
logger.trace("n={n}", n=n)


# loguru


def func_test_log_entry_inc_and_dec(x: int, /) -> tuple[int, int]:
with log():
Expand Down Expand Up @@ -67,6 +77,9 @@ def func_test_log_contextualize(x: int, /) -> int:
return x + 1


# tenacity


_counter = 0


Expand Down
Loading

0 comments on commit ba07a6f

Please sign in to comment.