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
« prev ^ index » next coverage.py v7.16.2, created at 2026-11-13 19:28 +0000
1"""Shared newsletter models."""
3from typing import Annotated, Optional
5from pydantic import BaseModel, BeforeValidator, Field, HttpUrl
7from data_api.utils.schema import url_corrector
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="發布日期")
18class NewsletterSource(BaseModel):
19 name: str = Field(..., description="該電子報名稱")
20 link: Annotated[HttpUrl, BeforeValidator(url_corrector)] = Field(
21 ..., description="該電子報網址"
22 )
23 details: dict = Field(..., description="該電子報詳細資訊")
26class NewsletterInfo(NewsletterSource):
27 articles: list[NewsletterArticle] = Field(..., description="該電子報文章列表")