Refactor to package specific directory
authorBenjamin Braatz <benjamin.braatz@graph-it.com>
Mon, 11 Jan 2021 08:44:25 +0000 (09:44 +0100)
committerBenjamin Braatz <benjamin.braatz@graph-it.com>
Mon, 11 Jan 2021 08:44:25 +0000 (09:44 +0100)
example.py
graphit/__init__.py [deleted file]
graphit/event.py [deleted file]
graphit_event/__init__.py [new file with mode: 0644]
graphit_event/interface.py [new file with mode: 0644]
graphit_event/mixin.py [new file with mode: 0644]

index 203d1b1184650418201c1419b72db7a901dfde11..e4839c66b65782ac99ada2e6fcd1d376969fce37 100755 (executable)
@@ -1,5 +1,5 @@
 #!/usr/bin/env python3
-from graphit.event import EventEmitterMixin
+from graphit_event import EventEmitterMixin
 
 
 class ExampleEmitter(EventEmitterMixin):
diff --git a/graphit/__init__.py b/graphit/__init__.py
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/graphit/event.py b/graphit/event.py
deleted file mode 100644 (file)
index 67c677e..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-__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)
diff --git a/graphit_event/__init__.py b/graphit_event/__init__.py
new file mode 100644 (file)
index 0000000..b68f1b7
--- /dev/null
@@ -0,0 +1,4 @@
+__all__ = ('EventEmitterInterface', 'EventEmitterMixin')
+
+from .interface import EventEmitterInterface
+from .mixin import EventEmitterMixin
diff --git a/graphit_event/interface.py b/graphit_event/interface.py
new file mode 100644 (file)
index 0000000..8b18970
--- /dev/null
@@ -0,0 +1,27 @@
+__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.
+        '''
diff --git a/graphit_event/mixin.py b/graphit_event/mixin.py
new file mode 100644 (file)
index 0000000..971671c
--- /dev/null
@@ -0,0 +1,66 @@
+__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)