From de4ceabfd8b9cf357332e7fa1bfb46c157402efa Mon Sep 17 00:00:00 2001 From: Michael Foord Date: Sun, 25 Apr 2010 19:53:49 +0000 Subject: Merged revisions 80476 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r80476 | michael.foord | 2010-04-25 20:02:46 +0100 (Sun, 25 Apr 2010) | 1 line Adding unittest.removeHandler function / decorator for removing the signal.SIGINT signal handler. With tests and docs. ........ --- Lib/unittest/signals.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'Lib/unittest/signals.py') diff --git a/Lib/unittest/signals.py b/Lib/unittest/signals.py index 0651cf2ede..fc31043283 100644 --- a/Lib/unittest/signals.py +++ b/Lib/unittest/signals.py @@ -1,6 +1,8 @@ import signal import weakref +from functools import wraps + __unittest = True @@ -36,3 +38,20 @@ def installHandler(): default_handler = signal.getsignal(signal.SIGINT) _interrupt_handler = _InterruptHandler(default_handler) signal.signal(signal.SIGINT, _interrupt_handler) + + +def removeHandler(method=None): + if method is not None: + @wraps(method) + def inner(*args, **kwargs): + initial = signal.getsignal(signal.SIGINT) + removeHandler() + try: + return method(*args, **kwargs) + finally: + signal.signal(signal.SIGINT, initial) + return inner + + global _interrupt_handler + if _interrupt_handler is not None: + signal.signal(signal.SIGINT, _interrupt_handler.default_handler) -- cgit v1.2.1