calendar

A HTML/PHP project for a self-hosted (family)-calendar.
Log | Files | Refs | README

schemas.py (1351B)


      1 from pydantic import BaseModel, field_validator
      2 import re
      3 
      4 
      5 class CalendarCreate(BaseModel):
      6     name: str
      7     color: str = "#88C0D0"
      8     invite_usernames: list[str] = []
      9 
     10     @field_validator("color")
     11     @classmethod
     12     def valid_color(cls, v: str) -> str:
     13         if not re.match(r"^#[0-9a-fA-F]{6}$", v):
     14             raise ValueError("color must be a hex color like #88C0D0")
     15         return v
     16 
     17 
     18 class CalendarUpdate(BaseModel):
     19     name: str | None = None
     20     color: str | None = None
     21 
     22     @field_validator("color")
     23     @classmethod
     24     def valid_color(cls, v: str | None) -> str | None:
     25         if v is not None and not re.match(r"^#[0-9a-fA-F]{6}$", v):
     26             raise ValueError("color must be a hex color like #88C0D0")
     27         return v
     28 
     29 
     30 class VisibilityUpdate(BaseModel):
     31     is_visible: bool
     32 
     33 
     34 class InviteRequest(BaseModel):
     35     email: str
     36 
     37 
     38 class AddMemberRequest(BaseModel):
     39     username: str
     40 
     41 
     42 class EventCreate(BaseModel):
     43     calendar_id: int
     44     title: str
     45     start_dt: str
     46     end_dt: str
     47     description: str | None = None
     48     all_day: bool = False
     49     attendee_usernames: list[str] = []
     50 
     51 
     52 class EventUpdate(BaseModel):
     53     title: str | None = None
     54     start_dt: str | None = None
     55     end_dt: str | None = None
     56     description: str | None = None
     57     all_day: bool | None = None
     58     attendee_usernames: list[str] | None = None