26 lines
866 B
Python
26 lines
866 B
Python
|
|
"""Shared Pydantic models for Schedule API payloads."""
|
||
|
|
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
from typing import Literal, Optional
|
||
|
|
|
||
|
|
from pydantic import BaseModel, Field, model_validator
|
||
|
|
|
||
|
|
|
||
|
|
class SchedulePayload(BaseModel):
|
||
|
|
schedule_kind: Literal["interval", "weekdays"] = "interval"
|
||
|
|
interval_days: int = Field(default=1, gt=0)
|
||
|
|
weekday_mask: int = Field(default=0, ge=0, le=127)
|
||
|
|
pause_until: Optional[str] = Field(default=None, description="ISO date YYYY-MM-DD")
|
||
|
|
|
||
|
|
@model_validator(mode="after")
|
||
|
|
def validate_kind(self) -> "SchedulePayload":
|
||
|
|
if self.schedule_kind == "weekdays" and self.weekday_mask <= 0:
|
||
|
|
raise ValueError("Mindestens ein Wochentag auswählen")
|
||
|
|
return self
|
||
|
|
|
||
|
|
def pause_until_date(self):
|
||
|
|
from services.schedule import _parse_pause_until
|
||
|
|
|
||
|
|
return _parse_pause_until(self.pause_until)
|