Completed
Push — master ( a5f58a...66ee29 )
by Andrii
11:46
created

SignalHandler.__init__()   A

Complexity

Conditions 1

Size

Total Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
c 1
b 0
f 0
dl 0
loc 5
rs 9.4285
1
#!/usr/bin/env python
2
3
import signal
4
from contextlib import contextmanager
5
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