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

13 statements  

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

1"""Shared newsletter models.""" 

2 

3from typing import Annotated, Optional 

4 

5from pydantic import BaseModel, BeforeValidator, Field, HttpUrl 

6 

7from data_api.utils.schema import url_corrector 

8 

9 

10class NewsletterArticle(BaseModel): 

11 title: Optional[str] = Field(None, description="電子報標題") 

12 link: Optional[Annotated[HttpUrl, BeforeValidator(url_corrector)]] = Field( 

13 None, description="電子報網址" 

14 ) 

15 date: Optional[str] = Field(None, description="發布日期") 

16 

17 

18class NewsletterSource(BaseModel): 

19 name: str = Field(..., description="該電子報名稱") 

20 link: Annotated[HttpUrl, BeforeValidator(url_corrector)] = Field( 

21 ..., description="該電子報網址" 

22 ) 

23 details: dict = Field(..., description="該電子報詳細資訊") 

24 

25 

26class NewsletterInfo(NewsletterSource): 

27 articles: list[NewsletterArticle] = Field(..., description="該電子報文章列表")