from dataclasses import dataclass from core.global_symbols import NotFound, ErrorObj from core.utils import sheerka_deepcopy @dataclass class ServiceObj: event_id: str # digest of the event where the object is created / modified class BaseService: """ Base class for services """ def __init__(self, sheerka, order=999): self.sheerka = sheerka self.order = order # initialisation order. The lowest is initialized first def initialize(self): """ Adds cache or bind methods :return: """ pass def store_values(self, context, *args): """ Use variable Manager to store the state of the service """ for prop_name in args: self.sheerka.record_var(context, self.NAME, prop_name, sheerka_deepcopy(getattr(self, prop_name))) def restore_values(self, *args): """ Use Variable Manager to restore the state of a service :param args: :return: """ for prop_name in args: if (value := self.sheerka.load_var(self.NAME, prop_name)) is not NotFound: setattr(self, prop_name, value) def store_var(self, context, var_name): """ Store/record the value of an attribute """ self.sheerka.record_var(context, self.NAME, var_name, getattr(self, var_name)) @dataclass() class FailedToCompileError(Exception, ErrorObj): cause: list