]> git.proxmox.com Git - mirror_edk2.git/blame - AppPkg/Applications/Python/Python-2.7.2/Lib/unittest/signals.py
EmbeddedPkg: Extend NvVarStoreFormattedLib LIBRARY_CLASS
[mirror_edk2.git] / AppPkg / Applications / Python / Python-2.7.2 / Lib / unittest / signals.py
CommitLineData
4710c53d 1import signal\r
2import weakref\r
3\r
4from functools import wraps\r
5\r
6__unittest = True\r
7\r
8\r
9class _InterruptHandler(object):\r
10 def __init__(self, default_handler):\r
11 self.called = False\r
12 self.default_handler = default_handler\r
13\r
14 def __call__(self, signum, frame):\r
15 installed_handler = signal.getsignal(signal.SIGINT)\r
16 if installed_handler is not self:\r
17 # if we aren't the installed handler, then delegate immediately\r
18 # to the default handler\r
19 self.default_handler(signum, frame)\r
20\r
21 if self.called:\r
22 self.default_handler(signum, frame)\r
23 self.called = True\r
24 for result in _results.keys():\r
25 result.stop()\r
26\r
27_results = weakref.WeakKeyDictionary()\r
28def registerResult(result):\r
29 _results[result] = 1\r
30\r
31def removeResult(result):\r
32 return bool(_results.pop(result, None))\r
33\r
34_interrupt_handler = None\r
35def installHandler():\r
36 global _interrupt_handler\r
37 if _interrupt_handler is None:\r
38 default_handler = signal.getsignal(signal.SIGINT)\r
39 _interrupt_handler = _InterruptHandler(default_handler)\r
40 signal.signal(signal.SIGINT, _interrupt_handler)\r
41\r
42\r
43def removeHandler(method=None):\r
44 if method is not None:\r
45 @wraps(method)\r
46 def inner(*args, **kwargs):\r
47 initial = signal.getsignal(signal.SIGINT)\r
48 removeHandler()\r
49 try:\r
50 return method(*args, **kwargs)\r
51 finally:\r
52 signal.signal(signal.SIGINT, initial)\r
53 return inner\r
54\r
55 global _interrupt_handler\r
56 if _interrupt_handler is not None:\r
57 signal.signal(signal.SIGINT, _interrupt_handler.default_handler)\r