summaryrefslogtreecommitdiffstats
path: root/Lib/unittest/signals.py
diff options
context:
space:
mode:
authorMichael Foord <fuzzyman@voidspace.org.uk>2010-04-25 19:53:49 (GMT)
committerMichael Foord <fuzzyman@voidspace.org.uk>2010-04-25 19:53:49 (GMT)
commitde4ceabfd8b9cf357332e7fa1bfb46c157402efa (patch)
tree838eeb9e95f3f72beeb754e17c6f20c9dc8ff24b /Lib/unittest/signals.py
parentaf30c5d32e52ec61cb9964dcb44f9b7eae82cfa9 (diff)
downloadcpython-de4ceabfd8b9cf357332e7fa1bfb46c157402efa.zip
cpython-de4ceabfd8b9cf357332e7fa1bfb46c157402efa.tar.gz
cpython-de4ceabfd8b9cf357332e7fa1bfb46c157402efa.tar.bz2
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. ........
Diffstat (limited to 'Lib/unittest/signals.py')
-rw-r--r--Lib/unittest/signals.py19
1 files changed, 19 insertions, 0 deletions
diff --git a/Lib/unittest/signals.py b/Lib/unittest/signals.py
index 0651cf2..fc31043 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)