Source code for kiwipy.utils

# -*- coding: utf-8 -*-
import logging
import traceback

__all__ = ('EventHelper',)

_LOGGER = logging.getLogger(__name__)


[docs]class EventHelper: def __init__(self, listener_type): assert listener_type is not None, 'Must provide valid listener type' self._listener_type = listener_type self._listeners = set()
[docs] def add_listener(self, listener): assert isinstance(listener, self._listener_type), 'Listener is not of right type' self._listeners.add(listener)
[docs] def remove_listener(self, listener): self._listeners.discard(listener)
[docs] def remove_all_listeners(self): self._listeners.clear()
@property def listeners(self): return self._listeners
[docs] def fire_event(self, event_function, *args, **kwargs): if event_function is None: raise ValueError('Must provide valid event method') for listener in self.listeners: try: getattr(listener, event_function.__name__)(*args, **kwargs) except Exception: # pylint: disable=broad-except _LOGGER.error('Listener %s produced an exception:\n%s', listener, traceback.format_exc())