Универсальный генератор моков из STANDS YAML: вердикт Опуса (возможно для 37 сервисов), маппинг, алгоритм, границы
This commit is contained in:
@@ -445,3 +445,50 @@ app-autotest/
|
|||||||
| 863 | *—* | array |
|
| 863 | *—* | array |
|
||||||
|
|
||||||
Для мока коды некритичны (мок сам отдаёт и шаблон и state.params — они должны совпадать между собой). Для реалистичности — код в `mock-architecture-prompt.md` достанет полные коды одной строкой Python.
|
Для мока коды некритичны (мок сам отдаёт и шаблон и state.params — они должны совпадать между собой). Для реалистичности — код в `mock-architecture-prompt.md` достанет полные коды одной строкой Python.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Универсальный генератор моков из STANDS YAML (Опус, 2026-07-31)
|
||||||
|
|
||||||
|
### Вердикт: универсальный конвертер возможен для всех 37 сервисов
|
||||||
|
|
||||||
|
Опус изучил 6 STANDS YAML (dummy, postgres, k8s, mariadb, VM v2, vDC).
|
||||||
|
Структура единообразна — генерятся одним приложением.
|
||||||
|
STANDS — авторитетный источник (сверен с HAR: create=18, параметры совпадают 1:1).
|
||||||
|
|
||||||
|
### Ключевой маппинг STANDS → polygon
|
||||||
|
|
||||||
|
| STANDS | Polygon | Тип |
|
||||||
|
|--------|---------|-----|
|
||||||
|
| `service_id`→`serviceId`, `service_short_name`→`svcShort` | 1:1 |
|
||||||
|
| `operations[].id/name/action` → `svcOperationId/operation/isCreate` | 1:1 |
|
||||||
|
| `params[].id/code/default/required` → `svcOperationCfsParamId/svcOperationCfsParam/defaultValue/isRequired` | 1:1 |
|
||||||
|
| `params[].data_type` → `dataType` | `html.unescape` |
|
||||||
|
| `params[].sub_params` (list) → `dataDescriptor` (dict по code) | трансформация |
|
||||||
|
| `operations[].kind: subresource` → `stateOut[plural(subresource)]` | трансформация |
|
||||||
|
| `name/service_man/lifecycle/outputs/func/descr/man/sort` | игнор |
|
||||||
|
|
||||||
|
### Алгоритм convert_one()
|
||||||
|
|
||||||
|
1. Базовые поля + операции (фильтр `kind: instance/action`)
|
||||||
|
2. `cfsParams` из create-параметров: unescape, sub_params→dataDescriptor (рекурсивно), default→`default_for(dataType)`
|
||||||
|
3. `stateParams`: scalar→строка, map-fixed→`json.dumps({sub_key: sub_val})`
|
||||||
|
4. `stateOut`: subresource-операции → `{plural(subresource): {}}`
|
||||||
|
|
||||||
|
### 4 границы универсальности
|
||||||
|
|
||||||
|
1. **Контент stateOut** — структура (users/databases) генерится, имена (pgadmin/mydb) — нет. Решение: мок реализует subresource-операции
|
||||||
|
2. **redeploy не у всех** — конвертер включает что есть
|
||||||
|
3. **Динамический valueList** (`func: getAvailableResourceRealms`) — берём статический
|
||||||
|
4. **Битые valueList** — pass-through
|
||||||
|
|
||||||
|
### Архитектура `polygon/from_stands.py`
|
||||||
|
|
||||||
|
```
|
||||||
|
convert_all(stands_dir) → dict[int, config]
|
||||||
|
convert_one(raw) → config
|
||||||
|
_map_param, _build_dd, _gen_state_params, _gen_state_out
|
||||||
|
```
|
||||||
|
|
||||||
|
Поток: `STANDS/*.yaml` → `yaml.safe_load` → `convert_one` → MockState.
|
||||||
|
Вызывается при СТАРТЕ полигона. Ручные YAML (`polygon/services/`) больше не нужны.
|
||||||
|
|||||||
Reference in New Issue
Block a user