Files
admin/.wiki/concepts/sched-admin-client-openapi.md

3.6 KiB
Raw Blame History

title: sched admin-client openapi — F&F раунд 2026-08-18 type: concept tags: [sched, ff, openapi, admin-api, python, codegen, f&f-round] related: openapi-generator-3-1-spec-gotchas, sched-fnf-r8-verification-stand updated: 2026-08-18

sched admin-client openapi — F&F раунд

Живая проверка claim'а sched openapi-spec: «клиент на любом ЯП одной командой». Вердикт: claim подтверждён с оговорками — генерация одной командой работает, но 3.1-спека до «любого ЯП без правок» не дотягивает (8 операций требуют raw-обхода).

Что делал / ожидал / получил

Что Python-клиент из опубликованной спеки @sched/admin-api/openapi.json 0.1.2 (verdaccio subpath-export, идентична репо), openapi-generator 7.24.0 (-g python, JDK 25)
Ожидал типизированная десериализация всех ответов, зелёный сьют, зелёный smoke
Получил сьют 24/24 (3 прогона), smoke 19/19, все 15 путей/21 операция живые — НО клиент в сыром виде падает на 8 операциях (pydantic ValidationError) из-за пробелов спеки; обход — raw_ops.py (сгенерированный пакет не тронут)

Deliverables

  • Код: sched/examples/admin-client-python/ — коммит e89e868 (запушен): openapi.json (пин 0.1.2), generate.ps1 (одна команда), sched_admin_client/ (сгенерированный, checked-in), tests/ (TDD 24/24), smoke.py (19/19), raw_ops.py (обход), README.md (F&F-таблица по всем путям).
  • Репорт: sched/.agents/inbox/2026-08-18T19-15-43Z-admin-fnf-openapi-client-report.md (F&F-формат: что→ожидал→получил→дока+гладкое).
  • Таска: [sched-admin-client-openapi] 🟢 закрыта 2026-08-18.

Находки (в репорт, спеку НЕ чинил — импл sched, TDD)

  • F-1 /health: спека security: [], daemon с ключом 401-ит даже health (письменный стенд :8080 непригоден для безключевых клиентов).
  • F-2 (главный) mutation-ответы {} вместо {task/run/schedule:…} → генераторы врут; объявить схемы ответов.
  • F-3 const: true → строковый enum ('true') ломает boolean.
  • F-4 oneOf+discriminator Scheduleactual_instance=None, контент только через raw JSON.
  • F-5 top-level dedupKey в POST /schedules молча игнорится (ключ — внутри schedule).
  • Механика генераторных граблей — openapi-generator-3-1-spec-gotchas.

Как повторить

cd sched/examples/admin-client-python
$env:JAVA_HOME = "C:\Program Files\Eclipse Adoptium\jdk-25.0.2.10-hotspot"
.\generate.ps1
pip install -r requirements.txt pytest
SCHED_ADMIN_URL=http://127.0.0.1:8127/api python -m pytest tests/ -v
python smoke.py --url http://127.0.0.1:8127/api

Стенд раунда: published @sched/daemon 0.3.4, --admin-port 8127, NO AUTH, scratch sqlite (/tmp/sched-acpy-stand/acpy.db). Письменный :8080 — под ключом (SCHED_ADMIN_KEY=dev-key), :8123 — стейл-билд (health 0.1.8, нет POST /tasks).