Skip to content

Commit 0a1c785

Browse files
authored
Add exception handling to EventBase.emit (#860)
* Add exception handling to EventBase.emit * Switch to logger.exception
1 parent 0e38b9a commit 0a1c785

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

test/test_event.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,11 @@ def test_once():
1010
mock.emit("test-event", 1)
1111
mock.emit("test-event", 2)
1212
assert len(calls) == 1
13+
14+
15+
def test_exception_on_emit(caplog):
16+
"""Test exception on emit gets handled."""
17+
mock = event.EventBase()
18+
mock.on("test-event", lambda _: 1 / 0)
19+
mock.emit("test-event", 1)
20+
assert "Error handling event: test-event" in caplog.text

zwave_js_server/event.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,10 @@ def event_listener(data: dict) -> None:
6262
def emit(self, event_name: str, data: dict) -> None:
6363
"""Run all callbacks for an event."""
6464
for listener in self._listeners.get(event_name, []).copy():
65-
listener(data)
65+
try:
66+
listener(data)
67+
except Exception: # pylint: disable=broad-exception-caught
68+
LOGGER.exception("Error handling event: %s", event_name)
6669

6770
def _handle_event_protocol(self, event: Event) -> None:
6871
"""Process an event based on event protocol."""

0 commit comments

Comments
 (0)