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

1"""Core domain types for flow definitions.""" 

2 

3from dataclasses import dataclass, field 

4from typing import Any 

5 

6 

7@dataclass(frozen=True, slots=True) 

8class Param: 

9 """A parameter declaration with optional default value.""" 

10 

11 name: str 

12 default: Any | None = None 

13 

14 

15@dataclass(frozen=True, slots=True) 

16class GuardCondition: 

17 """A when clause mapping evidence keys to condition expressions.""" 

18 

19 conditions: dict[str, str] 

20 

21 

22@dataclass(frozen=True, slots=True) 

23class Transition: 

24 """A trigger-to-target mapping; tracks referenced condition groups.""" 

25 

26 trigger: str 

27 target: str 

28 conditions: GuardCondition | None = None 

29 referenced_condition_groups: frozenset[str] | None = None 

30 

31 

32@dataclass(frozen=True, slots=True) 

33class State: 

34 """A workflow node with transitions, optional subflow, and named conditions.""" 

35 

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 

42 

43 

44@dataclass(frozen=True, slots=True) 

45class Flow: 

46 """Top-level flow definition with states, exits, and params.""" 

47 

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