74 lines
2.0 KiB
Python

from __future__ import annotations
from datetime import datetime
from typing import List, Literal, Optional
from pydantic import BaseModel, Field, ConfigDict
# Type de notification pour les schedules
NotificationType = Literal["none", "all", "errors"]
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
notification_type: NotificationType = "all"
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
notification_type: Optional[NotificationType] = 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)