#!/usr/bin/env python3
-from graphit.event import EventEmitterMixin
+from graphit_event import EventEmitterMixin
class ExampleEmitter(EventEmitterMixin):
+++ /dev/null
-__all__ = ('EventEmitterInterface', 'EventEmitterMixin')
-
-
-import abc
-import uuid
-
-from typing import Hashable, Callable, MutableMapping, Mapping
-
-EvMap = MutableMapping[Hashable, Hashable]
-CbMap = MutableMapping[Hashable, MutableMapping[Hashable, Callable]]
-
-
-class EventEmitterInterface(abc.ABC):
-
- @abc.abstractmethod
- def on(self, event: Hashable, callback: Callable) -> Hashable:
- '''
- Registers the given callback for the given event.
- Returns handle to unregister the given callback.
- '''
-
- @abc.abstractmethod
- def off(self, handle: Hashable) -> bool:
- '''
- Unregisters a previously registered callback by the given handle.
- Returns True on success.
- '''
-
- @abc.abstractmethod
- def _emit(self, event: Hashable, *args, **kwargs) -> None:
- '''
- Emits the given event by calling all callbacks registered for this
- event.
- '''
-
-
-class EventEmitterMixin(EventEmitterInterface):
- def on(self, event: Hashable, callback: Callable) -> Hashable:
- events: EvMap
- callbacks: CbMap
- try:
- events = self._eventEmitterMixinEvents
- callbacks = self._eventEmitterMixinCallbacks
- except AttributeError:
- self._eventEmitterMixinEvents: EvMap = {}
- self._eventEmitterMixinCallbacks: CbMap = {}
- events = self._eventEmitterMixinEvents
- callbacks = self._eventEmitterMixinCallbacks
-
- if event not in callbacks:
- callbacks[event] = {}
-
- handle = uuid.uuid4()
- while handle in events:
- handle = uuid.uuid4()
-
- events[handle] = event
- callbacks[event][handle] = callback
-
- return handle
-
- def off(self, handle: Hashable) -> bool:
- try:
- events = self._eventEmitterMixinEvents
- callbacks = self._eventEmitterMixinCallbacks
- except AttributeError:
- return False
-
- if handle not in events:
- return False
- event = events[handle]
-
- del events[handle]
- del callbacks[event][handle]
-
- if not callbacks[event]:
- del callbacks[event]
-
- return True
-
- def _emit(self, event: Hashable, *args, **kwargs) -> None:
- try:
- callbacks = self._eventEmitterMixinCallbacks
- except AttributeError:
- return
-
- if event not in callbacks:
- return
-
- for callback in callbacks[event].values():
- callback(*args, **kwargs)
--- /dev/null
+__all__ = ('EventEmitterInterface', 'EventEmitterMixin')
+
+from .interface import EventEmitterInterface
+from .mixin import EventEmitterMixin
--- /dev/null
+__all__ = ('EventEmitterInterface')
+
+import abc
+from typing import Hashable, Callable
+
+
+class EventEmitterInterface(abc.ABC):
+ @abc.abstractmethod
+ def on(self, event: Hashable, callback: Callable) -> Hashable:
+ '''
+ Registers the given callback for the given event.
+ Returns handle to unregister the given callback.
+ '''
+
+ @abc.abstractmethod
+ def off(self, handle: Hashable) -> bool:
+ '''
+ Unregisters a previously registered callback by the given handle.
+ Returns True on success.
+ '''
+
+ @abc.abstractmethod
+ def _emit(self, event: Hashable, *args, **kwargs) -> None:
+ '''
+ Emits the given event by calling all callbacks registered for this
+ event.
+ '''
--- /dev/null
+__all__ = ('EventEmitterMixin')
+
+import uuid
+from typing import Hashable, Callable, MutableMapping, Mapping
+
+from .interface import EventEmitterInterface
+
+EvMap = MutableMapping[Hashable, Hashable]
+CbMap = MutableMapping[Hashable, MutableMapping[Hashable, Callable]]
+
+
+class EventEmitterMixin(EventEmitterInterface):
+ def on(self, event: Hashable, callback: Callable) -> Hashable:
+ events: EvMap
+ callbacks: CbMap
+ try:
+ events = self._eventEmitterMixinEvents
+ callbacks = self._eventEmitterMixinCallbacks
+ except AttributeError:
+ self._eventEmitterMixinEvents: EvMap = {}
+ self._eventEmitterMixinCallbacks: CbMap = {}
+ events = self._eventEmitterMixinEvents
+ callbacks = self._eventEmitterMixinCallbacks
+
+ if event not in callbacks:
+ callbacks[event] = {}
+
+ handle = uuid.uuid4()
+ while handle in events:
+ handle = uuid.uuid4()
+
+ events[handle] = event
+ callbacks[event][handle] = callback
+
+ return handle
+
+ def off(self, handle: Hashable) -> bool:
+ try:
+ events = self._eventEmitterMixinEvents
+ callbacks = self._eventEmitterMixinCallbacks
+ except AttributeError:
+ return False
+
+ if handle not in events:
+ return False
+ event = events[handle]
+
+ del events[handle]
+ del callbacks[event][handle]
+
+ if not callbacks[event]:
+ del callbacks[event]
+
+ return True
+
+ def _emit(self, event: Hashable, *args, **kwargs) -> None:
+ try:
+ callbacks = self._eventEmitterMixinCallbacks
+ except AttributeError:
+ return
+
+ if event not in callbacks:
+ return
+
+ for callback in callbacks[event].values():
+ callback(*args, **kwargs)