Source code for oshconnect.events.listeners

#  =============================================================================
#  Copyright (c) 2025 Botts Innovative Research Inc.
#  Date: 2025/10/6
#  Author: Ian Patterson
#  Contact Email: ian@botts-inc.com
#  =============================================================================

from __future__ import annotations

from abc import ABC, abstractmethod
from dataclasses import dataclass, field
from typing import Callable

from .core import DefaultEventTypes, Event


[docs] @dataclass class IEventListener(ABC): """ Interface for event listeners. Subscribe to specific event types and/or topics. Empty lists mean "subscribe to all" — the handler filters before dispatching. """ topics: list[str] = field(default_factory=list) types: list[DefaultEventTypes] = field(default_factory=list)
[docs] @abstractmethod def handle_events(self, event: Event): pass
[docs] @dataclass class CallbackListener(IEventListener): """ Concrete IEventListener that wraps a Python callable. The primary user-facing subscription mechanism — no subclassing required. Example:: def my_handler(event: Event): print(event.data) listener = CallbackListener( types=[DefaultEventTypes.NEW_OBSERVATION], callback=my_handler, ) EventHandler().register_listener(listener) """ callback: Callable[[Event], None] = field(default=None)
[docs] def handle_events(self, event: Event): if self.callback is not None: self.callback(event)