I can persist tabmanager state

This commit is contained in:
2025-11-11 23:03:52 +01:00
parent 7f56b89e66
commit fb57a6a81d
9 changed files with 164 additions and 50 deletions

View File

@@ -42,14 +42,7 @@ class DbObject:
self._name = name or self.__class__.__name__
self._db_manager = db_manager or InstancesManager.get(self._session, Ids.DbManager, DbManager)
# init is possible
if self._db_manager.exists_entry(self._name):
props = self._db_manager.load(self._name)
for k, v in props.items():
if hasattr(self, k):
setattr(self, k, v)
else:
self._save_self()
self._finalize_initialization()
@contextmanager
def initializing(self):
@@ -58,8 +51,8 @@ class DbObject:
try:
yield
finally:
self._finalize_initialization()
self._initializing = old_state
self._save_self()
def __setattr__(self, name: str, value: str):
if name.startswith("_") or getattr(self, "_initializing", False):
@@ -73,6 +66,13 @@ class DbObject:
super().__setattr__(name, value)
self._save_self()
def _finalize_initialization(self):
if self._db_manager.exists_entry(self._name):
props = self._db_manager.load(self._name)
self.update(props)
else:
self._save_self()
def _save_self(self):
props = {k: getattr(self, k) for k, v in self._get_properties().items() if not k.startswith("_")}
if props:
@@ -103,11 +103,14 @@ class DbObject:
properties |= kwargs
with self.initializing():
for k, v in properties.items():
if hasattr(self, k) and k not in DbObject._forbidden_attrs: # internal variables cannot be updated
setattr(self, k, v)
# save the new state
old_state = getattr(self, "_initializing", False)
self._initializing = True
for k, v in properties.items():
if hasattr(self, k) and k not in DbObject._forbidden_attrs: # internal variables cannot be updated
setattr(self, k, v)
self._save_self()
self._initializing = old_state
def copy(self):
as_dict = self._get_properties().copy()