from core.utils import get_user_id, get_unique_id class BaseComponent: """ Base class for all components that need to have a session and an id """ def __init__(self, session, _id=None, role_name=None, **kwargs): self._session = session self._id = _id or self.create_component_id(session) self._role_name = role_name def get_id(self): return self._id def get_session(self): return self._session def get_user_id(self): return get_user_id(self._session) def __repr__(self): return self._id def __eq__(self, other): if type(other) is type(self): return self._id == other.get_id() else: return False def __hash__(self): return hash(self._id) @staticmethod def create_component_id(session): pass def render(self): pass def __ft__(self): if (not self._session["is_admin"] and self._role_name is not None and self._role_name not in self._session["roles"]): return None return self.render() class BaseComponentSingleton(BaseComponent): """ Base class for components that will have a single instance per user """ COMPONENT_INSTANCE_ID = None def __init__(self, session, _id=None, role_name=None, settings_manager=None, tabs_manager=None, **kwargs): super().__init__(session, _id, role_name,**kwargs) self._settings_manager = settings_manager self.tabs_manager = tabs_manager @classmethod def create_component_id(cls, session): return f"{cls.COMPONENT_INSTANCE_ID}{session['user_id']}" class BaseComponentMultipleInstance(BaseComponent): COMPONENT_INSTANCE_ID = None @classmethod def create_component_id(cls, session): component_id = cls.COMPONENT_INSTANCE_ID or cls.__name__ return get_unique_id(f"{component_id}{session['user_id']}")