From 7f5991aa348226bcb11aafef5c12170cade61d1c Mon Sep 17 00:00:00 2001 From: awsl1110 <89456977+awsl1110@users.noreply.github.com> Date: Sat, 31 May 2025 16:38:06 +0800 Subject: [PATCH] =?UTF-8?q?refactor(core):=20=E4=BC=98=E5=8C=96=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E9=A1=B9=E5=92=8C=E6=A8=A1=E5=9E=8B=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 为配置项添加类型注解,提高代码可读性和安全性 - 为模型字段添加默认值,优化数据处理 - 更新验证器使用新语法,以适应Pydantic库的变更 --- app/core/config.py | 8 +++++--- app/schemas/mediaserver.py | 2 +- app/schemas/message.py | 10 +++++----- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/app/core/config.py b/app/core/config.py index 3564965f..16b8884a 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -25,7 +25,7 @@ class ConfigModel(BaseModel): extra = "ignore" # 忽略未定义的配置项 # 项目名称 - PROJECT_NAME = "MoviePilot" + PROJECT_NAME: str = "MoviePilot" # 域名 格式;https://movie-pilot.org APP_DOMAIN: str = "" # API路径 @@ -124,7 +124,7 @@ class ConfigModel(BaseModel): # 元数据识别缓存过期时间(小时) META_CACHE_EXPIRE: int = 0 # 电视剧动漫的分类genre_ids - ANIME_GENREIDS = [16] + ANIME_GENREIDS: list[int] = [16] # 用户认证站点 AUTH_SITE: str = "" # 自动检查和更新站点资源包(站点索引、认证等) @@ -202,7 +202,7 @@ class ConfigModel(BaseModel): # CookieCloud同步黑名单,多个域名,分割 COOKIECLOUD_BLACKLIST: Optional[str] = None # CookieCloud对应的浏览器UA - USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.57" + USER_AGENT: str = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.57" # 电影重命名格式 MOVIE_RENAME_FORMAT: str = "{{title}}{% if year %} ({{year}}){% endif %}" \ "/{{title}}{% if year %} ({{year}}){% endif %}{% if part %}-{{part}}{% endif %}{% if videoFormat %} - {{videoFormat}}{% endif %}" \ @@ -394,6 +394,8 @@ class Settings(BaseSettings, ConfigModel, LogConfigModel): f"配置项 '{field_name}' 的值 '{value}' 无法转换成正确的类型,使用默认值 '{default}',错误信息: {e}") return default, True + # TODO[pydantic]: We couldn't refactor the `validator`, please replace it by `field_validator` manually. + # Check https://docs.pydantic.dev/dev-v2/migration/#changes-to-validators for more information. @validator('*', pre=True, always=True) def generic_type_validator(cls, value: Any, field): # noqa """ diff --git a/app/schemas/mediaserver.py b/app/schemas/mediaserver.py index 72d264d9..06b54d8e 100644 --- a/app/schemas/mediaserver.py +++ b/app/schemas/mediaserver.py @@ -11,7 +11,7 @@ class ExistMediaInfo(BaseModel): 媒体服务器存在媒体信息 """ # 类型 电影、电视剧 - type: Optional[MediaType] + type: Optional[MediaType] = None # 季 seasons: Optional[Dict[int, list]] = Field(default_factory=dict) # 媒体服务器类型:plex、jellyfin、emby、trimemedia diff --git a/app/schemas/message.py b/app/schemas/message.py index ba785c63..f6006fb7 100644 --- a/app/schemas/message.py +++ b/app/schemas/message.py @@ -102,7 +102,7 @@ class Subscription(BaseModel): """ 客户端消息订阅 """ - endpoint: Optional[str] + endpoint: Optional[str] = None keys: Optional[dict] = Field(default_factory=dict) @@ -110,8 +110,8 @@ class SubscriptionMessage(BaseModel): """ 客户端订阅消息体 """ - title: Optional[str] - body: Optional[str] - icon: Optional[str] - url: Optional[str] + title: Optional[str] = None + body: Optional[str] = None + icon: Optional[str] = None + url: Optional[str] = None data: Optional[dict] = Field(default_factory=dict)