Initial commit: add config_manager module with ConfigParameter and ConfigManager

This commit is contained in:
2026-04-15 18:44:47 +03:00
commit b8f34faff7
21 changed files with 825 additions and 0 deletions

View File

@@ -0,0 +1,172 @@
# 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
```
| Константа | Значение | Описание |
|----------|----------|----------|
| `DEFAULT_CONFIG_FILE` | `"config/global.yaml"` | Путь к файлу конфигурации |
| `DEFAULT_CONFIG_ENV` | `"KOMAI_CONFIG_FILE"` | Переменная окружения для переопределения пути |
| `DEFAULT_CATEGORY` | `"global"` | Категория по умолчанию |
## Регистрация параметров
```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") # категория по умолчанию
value = config.get("param_name", cat="app") # категория app
# Получить описание параметра
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")
```
## Сохранение и загрузка
```python
# Сохранить конфигурацию в файл
config.save() # использовать путь по умолчанию
config.save("/path/to/config.yaml") # сохранить в указанный файл
# Загрузить конфигурацию из файла
config.load() # использовать путь по умолчанию
config.load("/path/to/config.yaml") # загрузить из указанного файла
# Сбросить конфигурацию
config.reset() # очищает все параметры и перезагружает
```
## Примеры
### Базовое использование
```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"
```
### С валидатором
```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") # Ошибка валидации, значение не меняется
```
### Переопределение через 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 # переменная окружения
```