Added Application HolidayViewer
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
import logging
|
||||
from datetime import datetime
|
||||
|
||||
from constants import NOT_LOGGED, NO_SESSION
|
||||
from core.dbengine import DbEngine, TAG_PARENT, TAG_USER, TAG_DATE, DbException
|
||||
from core.instance_manager import NO_SESSION, NOT_LOGGED
|
||||
from core.settings_objects import *
|
||||
|
||||
load_settings_obj() # needed to make sure that the import of core is not removed
|
||||
@@ -13,6 +13,10 @@ logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class NoDefaultCls:
|
||||
"""
|
||||
No Default value class
|
||||
Return when no default value is provided.
|
||||
"""
|
||||
pass
|
||||
|
||||
|
||||
@@ -155,6 +159,14 @@ class SettingsTransaction:
|
||||
|
||||
|
||||
class GenericDbManager:
|
||||
"""
|
||||
Given an obj_entry (entry in DbEngine) and obj_type (object to serialize),
|
||||
>>> db = GenericDbManager(session, settings_manager, obj_entry, obj_type)
|
||||
>>> db.prop_name = value # will save the value to the database.
|
||||
>>> db.prop_name # will load the value from the database.
|
||||
|
||||
"""
|
||||
|
||||
def __init__(self, session, settings_manager: SettingsManager, obj_entry, obj_type):
|
||||
self.__dict__["_session"] = session
|
||||
self.__dict__["_settings_manager"] = settings_manager
|
||||
@@ -167,7 +179,7 @@ class GenericDbManager:
|
||||
|
||||
settings = self._settings_manager.load(self._session, self._obj_entry, self._obj_type())
|
||||
if not (hasattr(settings, key)):
|
||||
raise AttributeError(f"Settings {self._obj_entry.__name__} has no attribute {key}")
|
||||
raise AttributeError(f"Settings '{self._obj_entry}' has no attribute '{key}'.")
|
||||
|
||||
setattr(settings, key, value)
|
||||
self._settings_manager.save(self._session, self._obj_entry, settings)
|
||||
@@ -178,6 +190,68 @@ class GenericDbManager:
|
||||
|
||||
settings = self._settings_manager.load(self._session, self._obj_entry, self._obj_type())
|
||||
if not (hasattr(settings, item)):
|
||||
raise AttributeError(f"Settings {self._obj_entry.__name__} has no attribute {item}")
|
||||
raise AttributeError(f"Settings '{self._obj_entry}' has no attribute '{item}'.")
|
||||
|
||||
return getattr(settings, item)
|
||||
|
||||
|
||||
class NestedSettingsManager:
|
||||
"""
|
||||
Manages access and modification of a specific subset of persistent settings.
|
||||
|
||||
The GenericSubDbManager class provides mechanisms to dynamically get and set
|
||||
attributes for a specified settings object accessed through a session. It
|
||||
handles the retrieval, modification, and persistence of settings using a
|
||||
settings manager, ensuring that only valid attributes can be managed.
|
||||
|
||||
Given an obj_entry (entry in DbEngine) and obj_type (object to serialize),
|
||||
>>> db = NestedSettingsManager(session, settings_manager, obj_entry, obj_type, obj_attribute)
|
||||
>>> db.prop_name = value # will save obj_type.obj_attribute.prop_name in database
|
||||
>>> db.prop_name # will load obj_type.obj_attribute.prop_name from database
|
||||
"""
|
||||
|
||||
def __init__(self, session: dict, settings_manager: SettingsManager, obj_entry, obj_type, obj_attribute):
|
||||
self.__dict__["_session"] = session
|
||||
self.__dict__["_settings_manager"] = settings_manager
|
||||
self.__dict__["_obj_entry"] = obj_entry
|
||||
self.__dict__["_obj_type"] = obj_type
|
||||
self.__dict__["_obj_attribute"] = obj_attribute
|
||||
|
||||
def __getattr__(self, item):
|
||||
if item.startswith("_"):
|
||||
return super().__getattribute__(item)
|
||||
|
||||
settings, obj = self._get_settings_and_object()
|
||||
|
||||
if not hasattr(obj, item):
|
||||
raise AttributeError(f"Settings '{self._obj_attribute}' has no attribute '{item}'.")
|
||||
|
||||
return getattr(obj, item)
|
||||
|
||||
def __setattr__(self, key, value):
|
||||
if key.startswith("_"):
|
||||
super().__setattr__(key, value)
|
||||
|
||||
settings, obj = self._get_settings_and_object()
|
||||
if not (hasattr(obj, key)):
|
||||
raise AttributeError(f"Settings '{self._obj_attribute}', from '{self._obj_entry}' has no attribute '{key}'.")
|
||||
|
||||
setattr(obj, key, value)
|
||||
self._settings_manager.save(self._session, self._obj_entry, settings)
|
||||
|
||||
def update(self, values: dict, ignore_missing=False):
|
||||
settings, obj = self._get_settings_and_object()
|
||||
for k, v in values.items():
|
||||
if hasattr(obj, k):
|
||||
setattr(obj, k, v)
|
||||
elif not ignore_missing:
|
||||
raise AttributeError(f"Settings '{self._obj_attribute}', from '{self._obj_entry}' has no attribute '{k}'.")
|
||||
|
||||
self._settings_manager.save(self._session, self._obj_entry, settings)
|
||||
|
||||
def _get_settings_and_object(self):
|
||||
settings = self._settings_manager.load(self._session, self._obj_entry, self._obj_type())
|
||||
if not hasattr(settings, self._obj_attribute):
|
||||
raise AttributeError(f"Settings '{self._obj_entry}' has no attribute '{self._obj_attribute}'.")
|
||||
|
||||
return settings, getattr(settings, self._obj_attribute)
|
||||
|
||||
Reference in New Issue
Block a user