from __future__ import annotations from datetime import datetime from typing import List, Optional from pydantic import BaseModel, Field, ConfigDict class ScheduleBase(BaseModel): name: str playbook: str target: str schedule_type: str schedule_time: Optional[datetime] = None recurrence_type: Optional[str] = None recurrence_time: Optional[str] = None recurrence_days: Optional[List[int]] = None cron_expression: Optional[str] = None enabled: bool = True tags: Optional[List[str]] = None next_run: Optional[datetime] = None last_run: Optional[datetime] = None class ScheduleCreate(ScheduleBase): pass class ScheduleUpdate(BaseModel): name: Optional[str] = None playbook: Optional[str] = None target: Optional[str] = None schedule_type: Optional[str] = None schedule_time: Optional[datetime] = None recurrence_type: Optional[str] = None recurrence_time: Optional[str] = None recurrence_days: Optional[List[int]] = None cron_expression: Optional[str] = None enabled: Optional[bool] = None tags: Optional[List[str]] = None next_run: Optional[datetime] = None last_run: Optional[datetime] = None deleted_at: Optional[datetime] = None class ScheduleOut(ScheduleBase): id: str created_at: datetime updated_at: datetime deleted_at: Optional[datetime] = None model_config = ConfigDict(from_attributes=True) class ScheduleRunOut(BaseModel): id: int schedule_id: str task_id: Optional[str] = None status: str started_at: datetime completed_at: Optional[datetime] = None duration: Optional[float] = None error_message: Optional[str] = None output: Optional[str] = None created_at: datetime model_config = ConfigDict(from_attributes=True)