Add getall/getrawall for nested params, ROOT_KEY constant, tests and docs

This commit is contained in:
2026-04-15 20:04:04 +03:00
parent b8f34faff7
commit 3beccbf35e
6 changed files with 235 additions and 49 deletions

View File

@@ -34,14 +34,15 @@ config.reset()
## Константы
```python
from src.utils.config_manager import DEFAULT_CONFIG_FILE, DEFAULT_CONFIG_ENV, DEFAULT_CATEGORY
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$"` | Ключ для корневого значения во вложенных структурах |
## Регистрация параметров
@@ -49,11 +50,11 @@ from src.utils.config_manager import DEFAULT_CONFIG_FILE, DEFAULT_CONFIG_ENV, DE
config.register(
name="param_name", # Имя параметра (обязательно)
val="value", # Текущее значение (обязательно)
default="def_value", # Значение по умолчанию
desc="Description", # Описание параметра
default="def_value", # Значение по умолчанию
desc="Description", # Описание параметра
cat="category", # Категория (по умолчанию "global")
env="ENV_VAR", # Переменная окружения
validator=int # Функция валидации
validator=int # Функция валидации
)
```
@@ -68,8 +69,11 @@ config.register(
```python
# Получить значение параметра
value = config.get("param_name") # категория по умолчанию
value = config.get("param_name", cat="app") # категория app
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")
@@ -83,6 +87,34 @@ 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"}}
```
## Сохранение и загрузка
@@ -90,7 +122,7 @@ config.set("param_name", "new_value", cat="app")
```python
# Сохранить конфигурацию в файл
config.save() # использовать путь по умолчанию
config.save("/path/to/config.yaml") # сохранить в указанный файл
config.save("/path/to/config.yaml") # сохранить в указанный файл
# Загрузить конфигурацию из файла
config.load() # использовать путь по умолчанию
@@ -100,6 +132,28 @@ 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") # Ошибка валидации, значение не меняется
```
## Примеры
### Базовое использование
@@ -121,28 +175,6 @@ config.register(
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