Kairo-Jinkendo/backend/steering/context.py
Lars fc956d4ceb
All checks were successful
Deploy Development / deploy (push) Successful in 45s
Test Suite / pytest-backend (push) Successful in 1m23s
Test Suite / lint-backend (push) Successful in 2s
Test Suite / compose-smoke (push) Has been skipped
Test Suite / k6 /api/health Baseline (push) Successful in 18s
Test Suite / playwright-smoke (push) Successful in 12s
AP1.1: Method Registry — product_milestone_driven + Methode wählbar
Zweite Built-in-Methode mit meilensteinorientierter NextAction-Strategie, API und UI-Auswahl pro Vorhaben; AP0.10d Validation-Vorlagen.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-05 17:24:17 +02:00

39 lines
1.1 KiB
Python

"""SteeringContext read helpers — AP1.0."""
from __future__ import annotations
from typing import Any, Optional
from services import steering_context as sc_service
from steering.lifecycle.states import lifecycle_label
from steering.methods.registry import get_method
from tenant_context import TenantContext
def get_steering_context_dto(
ctx: TenantContext, *, initiative_id: str
) -> Optional[dict[str, Any]]:
row = sc_service.get_steering_context(
tenant_id=ctx.tenant_id, initiative_id=initiative_id
)
if not row:
row = sc_service.ensure_steering_context(
tenant_id=ctx.tenant_id,
initiative_id=initiative_id,
)
method = get_method(row["method_key"])
return {
**row,
"lifecycle_label": lifecycle_label(row["lifecycle_state"]),
"method_label": method.label if method else row["method_key"],
}
def get_or_create_for_initiative(
ctx: TenantContext, *, initiative_id: str
) -> dict[str, Any]:
dto = get_steering_context_dto(ctx, initiative_id=initiative_id)
if not dto:
raise ValueError("SteeringContext nicht verfügbar")
return dto