import signal

SIGNALS = [signal.SIGINT, signal.SIGTERM]


class SignalProtector:
    def __init__(self):
        self._sig = None
        self._frame = None
        self._old_handlers = None

    def __enter__(self):
        self._sig = None
        self._frame = None
        self._old_handlers = [signal.signal(sig, self._handler) for sig in SIGNALS]

    def __exit__(self, exc_type, exc_val, exc_tb):
        for sig, handler in zip(SIGNALS, self._old_handlers):
            signal.signal(sig, handler)
        for sig, handler in zip(SIGNALS, self._old_handlers):
            if self._sig == sig:
                handler(self._sig, self._frame)

    def _handler(self, sig, frame):
        self._sig = sig
        self._frame = frame
