from typing import Optional import omegaconf class Config: _config: Optional[omegaconf.DictConfig] = None def __init__(self, config_path: str): """ Loads the configuration file and stores it for future access. Args: config_path (str): Path to the YAML configuration file. """ self._config = omegaconf.OmegaConf.load(config_path) @property def institution_name(self)->str: if self._config is None: raise RuntimeError("Configuration not loaded") return self._config.institution_name @institution_name.setter def institution_name(self, value: str): if self._config is None: raise RuntimeError("Configuration not loaded") self._config.institution_name = value @property def loan_duration(self)->int: if self._config is None: raise RuntimeError("Configuration not loaded") return self._config.default_loan_duration @loan_duration.setter def loan_duration(self, value: int): if self._config is None: raise RuntimeError("Configuration not loaded") self._config.default_loan_duration = value @property def delete_inactive_user_duration(self)->int: if self._config is None: raise RuntimeError("Configuration not loaded") return self._config.inactive_user_deletion @delete_inactive_user_duration.setter def delete_inactive_user_duration(self, value: int): if self._config is None: raise RuntimeError("Configuration not loaded") self._config.inactive_user_deletion = value @property def catalogue(self)->bool: if self._config is None: raise RuntimeError("Configuration not loaded") return self._config.catalogue @catalogue.setter def catalogue(self, value: bool): if self._config is None: raise RuntimeError("Configuration not loaded") self._config.catalogue = value @property def database(self)->omegaconf.DictConfig: if self._config is None: raise RuntimeError("Configuration not loaded") return self._config.database @database.setter def database(self, value: omegaconf.DictConfig): if self._config is None: raise RuntimeError("Configuration not loaded") self._config.database = value @property def report(self)->omegaconf.DictConfig: if self._config is None: raise RuntimeError("Configuration not loaded") return self._config.report @report.setter def report(self, value: omegaconf.DictConfig): if self._config is None: raise RuntimeError("Configuration not loaded") self._config.report = value @property def debug(self)->bool: if self._config is None: raise RuntimeError("Configuration not loaded") return self._config.debug @debug.setter def debug(self, value: bool): if self._config is None: raise RuntimeError("Configuration not loaded") self._config.debug = value @property def log_debug(self)->bool: if self._config is None: raise RuntimeError("Configuration not loaded") return self._config.log_debug @log_debug.setter def log_debug(self, value: bool): if self._config is None: raise RuntimeError("Configuration not loaded") self._config.log_debug = value @property def ic_logging(self)->bool: if self._config is None: raise RuntimeError("Configuration not loaded") return self._config.ic_logging @ic_logging.setter def ic_logging(self, value:bool): if self._config is None: raise RuntimeError("Configuration not loaded") self._config.ic_logging = value def save(self): if self._config is None: raise RuntimeError("Configuration not loaded") omegaconf.OmegaConf.save(self._config, "config/settings.yaml") def apply_options(options:list): if self._config is None: raise RuntimeError("Configuration not loaded") for option in options: if option in self._config: self._config[option] = True else: raise KeyError(f"Option {option} not found in configuration") if __name__ == "__main__": cfg = Config("config/settings.yaml") #print(cfg.database.path) cfg.database.path = "nopathhere" #print(cfg.database.path) cfg.save() #cfg.updateValue("database.path", "Test")