from abc import ABC, abstractmethod from core_notifications.models import db class BaseLogicService(ABC): """ Base interface to encapsulate business logic. Example usage: class ConcreteService(BaseLogicService): def process(self, arg1, arg2): print("Doing some work") ConcreteService.execute(arg1, arg2) """ commit = True @classmethod def execute(cls, *args, **kwargs): session = db.session instance = cls(session=session) result = instance.process(*args, **kwargs) if cls.commit: session.commit() return result @abstractmethod def process(self, *args, **kwargs): pass def __init__(self, session): self.session = session def __repr__(self): return self.__class__.__name__