Add getall/getrawall for nested params, ROOT_KEY constant, tests and docs
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user