Универсальный генератор моков из STANDS YAML: вердикт Опуса (возможно для 37 сервисов), маппинг, алгоритм, границы

This commit is contained in:
2026-07-31 19:01:39 +04:00
parent 4b3d436d0d
commit 7dd62c365a
+47
View File
@@ -445,3 +445,50 @@ app-autotest/
| 863 | ** | array |
Для мока коды некритичны (мок сам отдаёт и шаблон и 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/`) больше не нужны.