Coverage for flowr / domain / flow_definition.py: 100%
31 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-02 18:23 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-02 18:23 +0000
1"""Core domain types for flow definitions."""
3from dataclasses import dataclass, field
4from typing import Any
7@dataclass(frozen=True, slots=True)
8class Param:
9 """A parameter declaration with optional default value."""
11 name: str
12 default: Any | None = None
15@dataclass(frozen=True, slots=True)
16class GuardCondition:
17 """A when clause mapping evidence keys to condition expressions."""
19 conditions: dict[str, str]
22@dataclass(frozen=True, slots=True)
23class Transition:
24 """A trigger-to-target mapping; tracks referenced condition groups."""
26 trigger: str
27 target: str
28 conditions: GuardCondition | None = None
29 referenced_condition_groups: frozenset[str] | None = None
32@dataclass(frozen=True, slots=True)
33class State:
34 """A workflow node with transitions, optional subflow, and named conditions."""
36 id: str
37 next: dict[str, Transition] = field(default_factory=dict)
38 flow: str | None = None
39 flow_version: str | None = None
40 attrs: dict[str, Any] | None = None
41 conditions: dict[str, dict[str, str]] | None = None
44@dataclass(frozen=True, slots=True)
45class Flow:
46 """Top-level flow definition with states, exits, and params."""
48 flow: str
49 version: str
50 exits: list[str]
51 states: list[State]
52 params: list[Param] = field(default_factory=list)
53 attrs: dict[str, Any] | None = None