From 126e5b5ca2a97832c406ab79827ed67654ed11f6 Mon Sep 17 00:00:00 2001 From: itdominator <1itdominator@gmail.com> Date: Sun, 22 Jan 2023 19:52:53 -0600 Subject: [PATCH] Added event system functionality --- src/utils/event_system.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/utils/event_system.py b/src/utils/event_system.py index 25c96fc..b2d4a71 100644 --- a/src/utils/event_system.py +++ b/src/utils/event_system.py @@ -18,6 +18,12 @@ class EventSystem: def subscribe(self, event_type, fn): self.subscribers[event_type].append(fn) + def unsubscribe(self, event_type, fn): + self.subscribers[event_type].remove(fn) + + def unsubscribe_all(self, event_type): + self.subscribers.pop(event_type, None) + def emit(self, event_type, data = None): if event_type in self.subscribers: for fn in self.subscribers[event_type]: @@ -28,3 +34,15 @@ class EventSystem: fn(data) else: fn() + + def emit_and_await(self, event_type, data = None): + """ NOTE: Should be used when signal has only one listener and vis-a-vis """ + if event_type in self.subscribers: + for fn in self.subscribers[event_type]: + if data: + if hasattr(data, '__iter__') and not type(data) is str: + return fn(*data) + else: + return fn(data) + else: + return fn()