#!/usr/bin/env python3 # -*- coding: utf-8 -*- from typing import Self, Any, Optional, Sequence from Utils.Utils import Utils from Interfaces.Application.AIChatInterface import AIChatInterface class SettingsManager: DEFAULT_SETTINGS:dict[str, Any|None] = { "autostart" : True, "default_settings_files" : "/JSON/AIChat.settings.json" } def __init__(self:Self, aichat:AIChatInterface, inputs:Optional[dict[str, Any|None]|Sequence[Any|None]] = None ) -> None: self.aichat:AIChatInterface = aichat self.__inputs:dict[str, Any|None] = self.get_dictionary(inputs) self.__settings:dict[str, Any|None] = {} self.__secrets:dict[str, Any|None] = {} for key in ( "default_settings_files", "settings_files", "default_settings", "settings" ): self.add(self.get(key), overwrite = True) for key in ( "default_secrets_files", "secrets_files", "default_secrets", "secrets" ): self.add_secrets(self.get(key), overwrite = True) def get(self:Self, keys:str|Sequence[str], inputs:Optional[dict[str, Any|None]|Sequence[Any|None]] = None, default:Optional[Any] = None ) -> Any|None: return Utils.get_values(keys, ( inputs, self.__inputs, self.__secrets, self.__settings, self.aichat.DEFAULT_SETTINGS ), default) def add(self:Self, inputs:Any|None, overwrite:bool = False) -> None: block:dict[str, Any|None] for block in Utils.get_dictionaries(inputs): key:str value:Any|None for key, value in block.items(): if overwrite or key not in self.__settings: self.__settings[key] = value def add_secrets(self:Self, inputs:Any|None, overwrite:bool = False) -> None: block:dict[str, Any|None] for block in Utils.get_dictionaries(inputs): key:str value:Any|None for key, value in block.items(): if overwrite or key not in self.__secrets: self.__secrets[key] = value