From 6bc2d40a643fcf9f37f8d7c2fc48c2b0cca45f2b Mon Sep 17 00:00:00 2001 From: Ryan Schmidt Date: Sun, 1 May 2016 10:51:17 -0700 Subject: [PATCH] Use defaultdict for event callback lists --- src/events.py | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/src/events.py b/src/events.py index c6b059a..18dbe9c 100644 --- a/src/events.py +++ b/src/events.py @@ -1,22 +1,16 @@ # event system +from collections import defaultdict +EVENT_CALLBACKS = defaultdict(list) -EVENT_CALLBACKS = {} - -def add_listener(event, callback, priority = 5): - if event not in EVENT_CALLBACKS: - EVENT_CALLBACKS[event] = [] - +def add_listener(event, callback, priority=5): if (priority, callback) not in EVENT_CALLBACKS[event]: EVENT_CALLBACKS[event].append((priority, callback)) EVENT_CALLBACKS[event].sort(key = lambda x: x[0]) def remove_listener(event, callback, priority = 5): - if event in EVENT_CALLBACKS and (priority, callback) in EVENT_CALLBACKS[event]: + if (priority, callback) in EVENT_CALLBACKS[event]: EVENT_CALLBACKS[event].remove((priority, callback)) - if event in EVENT_CALLBACKS and not EVENT_CALLBACKS[event]: - del EVENT_CALLBACKS[event] - class Event: def __init__(self, name, data): self.stop_processing = False @@ -25,9 +19,6 @@ class Event: self.data = data def dispatch(self, *args, **kwargs): - if self.name not in EVENT_CALLBACKS: - return True - for item in list(EVENT_CALLBACKS[self.name]): item[1](self, *args, **kwargs) if self.stop_processing: