Files
scenar-creator/app/models/event.py
Daneel b494d29790
Some checks failed
Build & Push Docker / build (push) Has been cancelled
feat: v4.2.0 - series blocks (add to all days, delete one/all in series); 37 tests
2026-02-20 17:58:56 +01:00

48 lines
1.4 KiB
Python

"""Pydantic v2 models for Scenar Creator v4."""
import uuid
from datetime import date as date_type, timedelta
from typing import List, Optional
from pydantic import BaseModel, Field
class Block(BaseModel):
id: str = Field(default_factory=lambda: str(uuid.uuid4()))
date: str # "YYYY-MM-DD"
start: str # "HH:MM" (can be > 24:00 for overnight continuation)
end: str # "HH:MM" (if end < start → overnight block)
title: str
type_id: str
responsible: Optional[str] = None
notes: Optional[str] = None
series_id: Optional[str] = None # shared across blocks added via "add to all days"
class ProgramType(BaseModel):
id: str
name: str
color: str # "#RRGGBB"
class EventInfo(BaseModel):
title: str
subtitle: Optional[str] = None
# Multi-day: date_from → date_to (inclusive). Backward compat: date = date_from.
date: Optional[str] = None # legacy / backward compat
date_from: Optional[str] = None
date_to: Optional[str] = None
location: Optional[str] = None
class ScenarioDocument(BaseModel):
version: str = "1.0"
event: EventInfo
program_types: List[ProgramType]
blocks: List[Block]
def get_sorted_dates(self) -> List[str]:
"""Return sorted list of unique block dates."""
dates = sorted(set(b.date for b in self.blocks))
return dates