From edb7e9bbf5216ef9b0384245665f2ac3fd11debf Mon Sep 17 00:00:00 2001 From: Jonathan Kamens Date: Tue, 21 Aug 2012 16:02:33 -0400 Subject: [PATCH] Refactor delayed_signals class for readability --- zipline/utils/delayed_signals.py | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/zipline/utils/delayed_signals.py b/zipline/utils/delayed_signals.py index 1341fa3e..9ca8c811 100644 --- a/zipline/utils/delayed_signals.py +++ b/zipline/utils/delayed_signals.py @@ -13,25 +13,23 @@ class delayed_signals(object): """ def handler(self, signum, frame=None): - self.got.append([self.trapped.index(signum), frame]) + self.got.append({'signum': signum, 'frame': frame}) def __init__(self, signals): - self.trapped = signals - self.orig_handlers = [] + self.signals = signals + self.handlers = {} self.got = [] def __enter__(self): - for sig in self.trapped: - self.orig_handlers.append(signal(sig, self.handler)) + for signum in self.signals: + # signal() returns the old signal handler + self.handlers[signum] = signal(signum, self.handler) def __exit__(self, time, value, traceback): - for i in xrange(len(self.trapped)): - signal(self.trapped[i], self.orig_handlers[i]) - for intercepted in self.got: - i = intercepted[0] - signum = self.trapped[i] - frame = intercepted[1] - self.orig_handlers[i](signum, frame) + for signum, handler in self.handlers.items(): + signal(signum, handler) + for signum, frame in ((i['signum'], i['frame']) for i in self.got): + self.handlers[signum](signum, frame) def __call__(self, fn): @wraps(fn)