# ConfigManager Управление конфигурацией с регистрацией параметров и описаний. ## Установка ```python import src.utils.config_manager config = src.utils.config_manager.config ``` ## Быстрый старт ```python import src.utils.config_manager config = src.utils.config_manager.config # Регистрация параметра config.register(name="app_name", val="komAI", desc="Наименование проекта", cat="app") # Получение значения name = config.get("app_name", cat="app") # Изменение значения config.set("app_name", "NewName", cat="app") # Сохранение в файл config.save() # Сброс и перезагрузка config.reset() ``` ## Константы ```python from src.utils.config_manager import DEFAULT_CONFIG_FILE, DEFAULT_CONFIG_ENV, DEFAULT_CATEGORY, ROOT_KEY ``` | Константа | Значение | Описание | |----------|---------|----------| | `DEFAULT_CONFIG_FILE` | `"config/global.yaml"` | Путь к файлу конфигурации | | `DEFAULT_CONFIG_ENV` | `"KOMAI_CONFIG_FILE"` | Переменная окружения для переопределения пути | | `DEFAULT_CATEGORY` | `"global"` | Категория по умолчанию | | `ROOT_KEY` | `"$root$"` | Ключ для корневого значения во вложенных структурах | ## Регистрация параметров ```python config.register( name="param_name", # Имя параметра (обязательно) val="value", # Текущее значение (обязательно) default="def_value", # Значение по умолчанию desc="Description", # Описание параметра cat="category", # Категория (по умолчанию "global") env="ENV_VAR", # Переменная окружения validator=int # Функция валидации ) ``` ### Категории Рекомендуемые категории: - `app` - параметры приложения - `logging` - параметры логирования - `global` - общие параметры (по умолчанию) ## Получение значений ```python # Получить значение параметра value = config.get("param_name") # категория по умолчанию (global) value = config.get("param_name", cat="app") # категория app # Получить по полному ключу (без подстановки категории) value = config.getraw("app.param_name") # Получить описание параметра desc = config.get_description("param_name", cat="app") # Получить объект ConfigParameter param = config.get_parameter("param_name", cat="app") ``` ## Изменение значений ```python # Изменить значение параметра config.set("param_name", "new_value", cat="app") # Изменить по полному ключу config.setraw("app.param_name", "new_value") ``` ## Вложенные параметры Параметры с точками в имени создают вложенные структуры: ```python config.register(name="coder", val="llama-coder", cat="models") config.register(name="coder.thinking", val="full", cat="models") config.register(name="coder.temperature", val="0.3", cat="models") config.register(name="chatter", val="gemmini", cat="models") config.register(name="chatter.thinking", val="none", cat="models") config.register(name="chatter.temperature", val="0.9", cat="models") # Получить корневое значение config.get("coder", cat="models") # "llama-coder" # Получить все параметры группы с корневым значением config.getall("coder", cat="models") # {"$root$": "llama-coder", "thinking": "full", "temperature": "0.3"} # Получить все параметры категории в виде вложенного dict config.getrawall("models") # {"coder": {"$root$": "llama-coder", "thinking": "full", "temperature": "0.3"}, # "chatter": {"$root$": "gemmini", "thinking": "none", "temperature": "0.9"}} ``` ## Сохранение и загрузка ```python # Сохранить конфигурацию в файл config.save() # использовать путь по умолчанию config.save("/path/to/config.yaml") # сохранить в указанный файл # Загрузить конфигурацию из файла config.load() # использовать путь по умолчанию config.load("/path/to/config.yaml") # загрузить из указанного файла # Сбросить конфигурацию config.reset() # очищает все параметры и перезагружает ``` ## Валидация ```python def validate_level(old_val, new_val): valid_levels = ["DEBUG", "INFO", "WARNING", "ERROR"] if new_val not in valid_levels: raise ValueError(f"Invalid level: {new_val}") config.register( name="level", val="INFO", default="INFO", desc="Уровень логирования", cat="logging", validator=validate_level ) # При изменении значения вызывается валидатор config.set("level", "DEBUG") # OK config.set("level", "INVALID") # Ошибка валидации, значение не меняется ``` ## Примеры ### Базовое использование ```python import src.utils.config_manager config = src.utils.config_manager.config # Регистрация параметра приложения config.register( name="name", val="komAI", default="MyApp", desc="Наименование проекта", cat="app" ) # Получение значения print(config.get("name", cat="app")) # "komAI" ``` ### Переопределение через env ```python # Установить путь через переменную окружения # export KOMAI_CONFIG_FILE=/path/to/config.yaml config.load() # автоматически использует KOMAI_CONFIG_FILE ``` ### Работа с ConfigParameter ```python param = config.get_parameter("name", cat="app") # Конвертация значений param.as_int() # в целое число param.as_bool() # в boolean param.as_str() # в строку # Доступ к свойствам param.name # имя параметра param.val # текущее значение param.default # значение по умолчанию param.desc # описание param.cat # категория param.env # переменная окружения ```