[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