SurfSense/surfsense_backend/app/automations/schemas/definition/plan_step.py

28 lines
956 B
Python

"""``PlanStep`` — one step in the sequential plan."""
from __future__ import annotations
from typing import Any
from pydantic import BaseModel, ConfigDict, Field
class PlanStep(BaseModel):
model_config = ConfigDict(extra="forbid")
step_id: str = Field(..., min_length=1, description="Unique within the plan.")
action: str = Field(..., min_length=1, description="Action type; resolved via registry.")
when: str | None = Field(
default=None,
description="Optional predicate; step is skipped when falsy.",
)
params: dict[str, Any] = Field(
default_factory=dict,
description="Action-type-specific params; rendered at execute time.",
)
output_as: str | None = Field(
default=None,
description="Bind step output under this name. Defaults to step_id.",
)
max_retries: int | None = Field(default=None, ge=0)
timeout_seconds: int | None = Field(default=None, gt=0)