205 lines
6.9 KiB
Markdown
205 lines
6.9 KiB
Markdown
# 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 # переменная окружения
|
||
```
|