"""Pydantic models for execution records (one per tracked function call)."""
from datetime import datetime
from typing import ClassVar
from uuid import UUID
from pydantic import BaseModel, ConfigDict, Field
from .types import ExecutionStatus
[docs]
class ExecutionBase(BaseModel):
"""Model for an execution record grouping nodes/edges from a single function call."""
[docs]
status: ExecutionStatus = Field(default=ExecutionStatus.PENDING, description="Execution status")
[docs]
start_time: datetime | None = Field(default=None, description="When execution started")
[docs]
end_time: datetime | None = Field(default=None, description="When execution ended")
[docs]
duration_seconds: float | None = Field(default=None, description="Duration in seconds")
[docs]
error_message: str | None = Field(default=None, description="Error message if failed")
[docs]
error_traceback: str | None = Field(default=None, description="Full traceback if failed")
[docs]
class ExecutionCreate(ExecutionBase):
"""Fields used to create an Execution."""
[docs]
function_node_id: UUID | None = Field(default=None, description="The function node for this execution")
[docs]
class Execution(ExecutionBase):
"""Execution response model."""
[docs]
model_config = ConfigDict(from_attributes=True)
[docs]
col_names_for_table: ClassVar[list[str]] = [
"id_", "function_node_id", "status", "start_time", "duration_seconds",
]
[docs]
function_node_id: UUID | None = None