Coverage for src/data_api/models/calendars.py: 100%

17 statements  

« prev     ^ index     » next       coverage.py v7.16.2, created at 2026-11-13 19:28 +0000

1"""Shared published campus calendar models.""" 

2 

3from typing import Optional 

4 

5from pydantic import BaseModel, Field, HttpUrl 

6 

7 

8class Calendar(BaseModel): 

9 id: str = Field(..., description="行事曆 id,例如 academic、library-main") 

10 name: Optional[str] = Field(None, description="行事曆名稱") 

11 description: Optional[str] = Field(None, description="行事曆說明") 

12 timezone: Optional[str] = Field(None, description="時區") 

13 category: Optional[str] = Field(None, description="行事曆分類,例如 library") 

14 source: Optional[str] = Field(None, description="資料來源,例如 NTHU Library") 

15 url: Optional[HttpUrl] = Field(None, description="來源行事曆網址") 

16 

17 

18class CalendarEvent(BaseModel): 

19 id: str = Field(..., description="事件 id") 

20 title: str = Field(..., description="事件標題") 

21 description: Optional[str] = Field(None, description="事件說明") 

22 start: str = Field( 

23 ..., description="開始時間;全天事件為日期 (YYYY-MM-DD),否則為 ISO 8601 當地時間" 

24 ) 

25 end: str = Field(..., description="結束時間;結束日期或時間不包含在內 (iCal 慣例)") 

26 all_day: bool = Field(..., description="是否為全天事件")