75 lines
1.8 KiB
Python
75 lines
1.8 KiB
Python
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']}")
|