[py-svn] r61943 - py/branch/pytestplugin/py/misc

hpk at codespeak.net hpk at codespeak.net
Mon Feb 16 12:08:23 CET 2009


Author: hpk
Date: Mon Feb 16 12:08:21 2009
New Revision: 61943

Modified:
   py/branch/pytestplugin/py/misc/event.py
Log:
unify dict for callbacks


Modified: py/branch/pytestplugin/py/misc/event.py
==============================================================================
--- py/branch/pytestplugin/py/misc/event.py	(original)
+++ py/branch/pytestplugin/py/misc/event.py	Mon Feb 16 12:08:21 2009
@@ -2,35 +2,41 @@
 class EventBus(object): 
     """ Event Bus for distributing named and unnamed events. """ 
     def __init__(self):
-        self._kwsubscribers = {}
-        self._subscribers = []
+        self._subscribers = {}
+
+    def _getsubscribers(self, key):
+        try:
+            return self._subscribers[key]
+        except KeyError:
+            x = self._subscribers[key] = []
+            return x
 
     def subscribe(self, callback=None, **kwcallback):
         """ subscribe callback to bus events. """ 
         if callback:
-            self._subscribers.append(callback)
+            self._getsubscribers('').append(callback)
             assert not kwcallback
         else:
             assert len(kwcallback) == 1
             name, call = kwcallback.popitem()
-            self._kwsubscribers.setdefault(name, []).append(call)
+            self._getsubscribers(name).append(call)
 
     def unsubscribe(self, callback=None, **kwcallback):
         """ unsubscribe given callback from bus events. """ 
         try:
             if callback is not None:
-                self._subscribers.remove(callback)
+                self._getsubscribers('').remove(callback)
             else:
                 for name, call in kwcallback.items():
-                    self._kwsubscribers[name].remove(call)
+                    self._getsubscribers(name).remove(call)
         except ValueError, e:
             raise KeyError(*e.args)
     
     def notify(self, **kw):
         for name in kw:
-            for callback in self._kwsubscribers.get(name, ()):
+            for callback in self._getsubscribers(name):
                 callback(kw[name])
-            for callback in self._subscribers:
+            for callback in self._getsubscribers(''):
                 callback((name, kw[name]))
 
 eventbus = EventBus()



More information about the pytest-commit mailing list