| Total Complexity | 6 |
| Total Lines | 25 |
| Duplicated Lines | 0 % |
| Changes | 1 | ||
| Bugs | 0 | Features | 0 |
| 1 | #!/usr/bin/env python |
||
| 6 | class SignalHandler: |
||
| 7 | def __init__(self, callback, what=signal.SIGUSR2): |
||
| 8 | self.callback = callback |
||
| 9 | self.received = False |
||
| 10 | self.working = False |
||
| 11 | signal.signal(what, self.on_signal) |
||
| 12 | |||
| 13 | def on_signal(self, signal, frame): |
||
| 14 | self.received = True |
||
| 15 | if not self.working: |
||
| 16 | self.run_callback() |
||
| 17 | |||
| 18 | def run_callback(self): |
||
| 19 | self.received = False |
||
| 20 | self.callback() |
||
| 21 | |||
| 22 | @contextmanager |
||
| 23 | def block_signals(self): |
||
| 24 | self.working = True |
||
| 25 | try: |
||
| 26 | yield |
||
| 27 | finally: |
||
| 28 | self.working = False |
||
| 29 | if self.received: |
||
| 30 | self.run_callback() |
||
| 31 | |||
| 32 |