github.com/grumpyhome/grumpy@v0.3.1-0.20201208125205-7b775405bdf1/grumpy-runtime-src/third_party/stdlib/unittest_signals.py (about) 1 # TODO: support signal 2 # import signal 3 # import weakref 4 5 # from functools import wraps 6 import functools 7 wraps = functools.wraps 8 9 __unittest = True 10 11 12 class _InterruptHandler(object): 13 pass 14 # def __init__(self, default_handler): 15 # self.called = False 16 # self.original_handler = default_handler 17 # if isinstance(default_handler, int): 18 # print 'signal not supported yet' 19 # if default_handler == signal.SIG_DFL: 20 # # Pretend it's signal.default_int_handler instead. 21 # default_handler = signal.default_int_handler 22 # elif default_handler == signal.SIG_IGN: 23 # # Not quite the same thing as SIG_IGN, but the closest we 24 # # can make it: do nothing. 25 # def default_handler(unused_signum, unused_frame): 26 # pass 27 # else: 28 # raise TypeError("expected SIGINT signal handler to be " 29 # "signal.SIG_IGN, signal.SIG_DFL, or a " 30 # "callable object") 31 # self.default_handler = default_handler 32 33 # def __call__(self, signum, frame): 34 # installed_handler = signal.getsignal(signal.SIGINT) 35 # if installed_handler is not self: 36 # # if we aren't the installed handler, then delegate immediately 37 # # to the default handler 38 # self.default_handler(signum, frame) 39 40 # if self.called: 41 # self.default_handler(signum, frame) 42 # self.called = True 43 # for result in _results.keys(): 44 # result.stop() 45 46 # _results = weakref.WeakKeyDictionary() 47 _results = {} 48 def registerResult(result): 49 _results[result] = 1 50 51 def removeResult(result): 52 return bool(_results.pop(result, None)) 53 54 _interrupt_handler = None 55 def installHandler(): 56 global _interrupt_handler 57 pass 58 # if _interrupt_handler is None: 59 # default_handler = signal.getsignal(signal.SIGINT) 60 # _interrupt_handler = _InterruptHandler(default_handler) 61 # signal.signal(signal.SIGINT, _interrupt_handler) 62 63 64 def removeHandler(method=None): 65 pass 66 # if method is not None: 67 # # @wraps(method) 68 # def inner(*args, **kwargs): 69 # initial = signal.getsignal(signal.SIGINT) 70 # removeHandler() 71 # try: 72 # return method(*args, **kwargs) 73 # finally: 74 # signal.signal(signal.SIGINT, initial) 75 # inner = wraps(method)(inner) 76 # return inner 77 78 # global _interrupt_handler 79 # if _interrupt_handler is not None: 80 # signal.signal(signal.SIGINT, _interrupt_handler.original_handler)