import abc from components.connectable import Connectable from contextlib import contextmanager class AHeater(Connectable): def __init__(self, simulated=True): Connectable.__init__(self, simulated) self.is_active = False @abc.abstractmethod def get_power_min(self): pass @abc.abstractmethod def get_power_max(self): pass @abc.abstractmethod def get_powers(self): pass def close(self): pass @contextmanager def open(self): try: self.activate(True) yield None finally: self.activate(False) return None @abc.abstractmethod def activate(self, enable): self.is_active = enable @abc.abstractmethod def is_activated(self): return self.is_active @abc.abstractmethod def process(self): pass @abc.abstractmethod def set_power(self, power): pass @abc.abstractmethod def get_power(self): return None