Final forecast wiring — §22 reaches the API.
- horizon query param on POST /{cad}/analyze ({6,12,18}, default 12; 422 before any
DB/compute work otherwise).
- best-effort fire-and-forget forecast_site_finder_report.delay(cad, horizon,
created_by) after persist (lazy import, no api↔workers cycle); Celery/Redis down →
forecast.status='unavailable', analyze still 200 (never blocks/500s). Adds additive
result_payload['forecast'] = {status: pending|unavailable, horizon}.
- new read-only GET /{cad}/forecast: latest schema_version='1.0' run → 200
{status:ready, run_id, created_at, report} else 202 {status:pending}; graceful on DB
error (202, never 500). Mirrors fetch-status RBAC/style.
Additive only — existing analyze response keys unchanged. code-review APPROVE
(analyze uncrashable + additive; 422 pre-flight; GET reads '1.0' not 'analyze-1.0').
96 api tests pass; ruff clean. Refs #995 #992 #961.
|
||
|---|---|---|
| .. | ||
| v1 | ||
| __init__.py | ||