fix schemas default_factory

This commit is contained in:
jxxghp
2024-12-23 11:35:38 +08:00
parent 800a66dc99
commit d45d49edbd
13 changed files with 86 additions and 77 deletions

View File

@@ -1,6 +1,6 @@
from typing import Optional, Dict, List, Union
from pydantic import BaseModel
from pydantic import BaseModel, Field
class MetaInfo(BaseModel):
@@ -104,56 +104,56 @@ class MediaInfo(BaseModel):
# 二级分类
category: Optional[str] = ""
# 季季集清单
seasons: Optional[Dict[int, list]] = {}
seasons: Optional[Dict[int, list]] = Field(default_factory=dict)
# 季详情
season_info: Optional[List[dict]] = []
season_info: Optional[List[dict]] = Field(default_factory=list)
# 别名和译名
names: Optional[list] = []
names: Optional[list] = Field(default_factory=list)
# 演员
actors: Optional[list] = []
actors: Optional[list] = Field(default_factory=list)
# 导演
directors: Optional[list] = []
directors: Optional[list] = Field(default_factory=list)
# 详情链接
detail_link: Optional[str] = None
# 其它TMDB属性
# 是否成人内容
adult: Optional[bool] = False
# 创建人
created_by: Optional[list] = []
created_by: Optional[list] = Field(default_factory=list)
# 集时长
episode_run_time: Optional[list] = []
episode_run_time: Optional[list] = Field(default_factory=list)
# 风格
genres: Optional[List[dict]] = []
genres: Optional[List[dict]] = Field(default_factory=list)
# 首播日期
first_air_date: Optional[str] = None
# 首页
homepage: Optional[str] = None
# 语种
languages: Optional[list] = []
languages: Optional[list] = Field(default_factory=list)
# 最后上映日期
last_air_date: Optional[str] = None
# 流媒体平台
networks: Optional[list] = []
networks: Optional[list] = Field(default_factory=list)
# 集数
number_of_episodes: Optional[int] = 0
# 季数
number_of_seasons: Optional[int] = 0
# 原产国
origin_country: Optional[list] = []
origin_country: Optional[list] = Field(default_factory=list)
# 原名
original_name: Optional[str] = None
# 出品公司
production_companies: Optional[list] = []
production_companies: Optional[list] = Field(default_factory=list)
# 出品国
production_countries: Optional[list] = []
production_countries: Optional[list] = Field(default_factory=list)
# 语种
spoken_languages: Optional[list] = []
spoken_languages: Optional[list] = Field(default_factory=list)
# 状态
status: Optional[str] = None
# 标签
tagline: Optional[str] = None
# 风格ID
genre_ids: Optional[list] = []
genre_ids: Optional[list] = Field(default_factory=list)
# 评价数量
vote_count: Optional[int] = 0
# 流行度
@@ -161,7 +161,7 @@ class MediaInfo(BaseModel):
# 时长
runtime: Optional[int] = None
# 下一集
next_episode_to_air: Optional[dict] = {}
next_episode_to_air: Optional[dict] = Field(default_factory=dict)
class TorrentInfo(BaseModel):
@@ -213,7 +213,7 @@ class TorrentInfo(BaseModel):
# HR
hit_and_run: Optional[bool] = False
# 种子标签
labels: Optional[list] = []
labels: Optional[list] = Field(default_factory=list)
# 种子优先级
pri_order: Optional[int] = 0
# 促销
@@ -245,13 +245,13 @@ class MediaPerson(BaseModel):
type: Optional[Union[str, int]] = 1
name: Optional[str] = None
character: Optional[str] = None
images: Optional[dict] = {}
images: Optional[dict] = Field(default_factory=dict)
# themoviedb
profile_path: Optional[str] = None
gender: Optional[Union[str, int]] = None
original_name: Optional[str] = None
credit_id: Optional[str] = None
also_known_as: Optional[list] = []
also_known_as: Optional[list] = Field(default_factory=list)
birthday: Optional[str] = None
deathday: Optional[str] = None
imdb_id: Optional[str] = None
@@ -260,11 +260,11 @@ class MediaPerson(BaseModel):
popularity: Optional[float] = None
biography: Optional[str] = None
# douban
roles: Optional[list] = []
roles: Optional[list] = Field(default_factory=list)
title: Optional[str] = None
url: Optional[str] = None
avatar: Optional[Union[str, dict]] = None
latin_name: Optional[str] = None
# bangumi
career: Optional[list] = []
career: Optional[list] = Field(default_factory=list)
relation: Optional[str] = None

View File

@@ -1,6 +1,6 @@
from typing import Optional
from pydantic import BaseModel
from pydantic import BaseModel, Field
class FileItem(BaseModel):
@@ -21,7 +21,7 @@ class FileItem(BaseModel):
# 修改时间
modify_time: Optional[float] = None
# 子节点
children: Optional[list] = []
children: Optional[list] = Field(default_factory=list)
# ID
fileid: Optional[str] = None
# 父ID
@@ -45,4 +45,4 @@ class StorageUsage(BaseModel):
class StorageTransType(BaseModel):
# 传输类型
transtype: Optional[dict] = {}
transtype: Optional[dict] = Field(default_factory=dict)

View File

@@ -1,7 +1,7 @@
from pathlib import Path
from typing import Optional, Dict, Union, List, Any
from pydantic import BaseModel
from pydantic import BaseModel, Field
from app.schemas.types import MediaType
@@ -13,7 +13,7 @@ class ExistMediaInfo(BaseModel):
# 类型 电影、电视剧
type: Optional[MediaType]
# 季
seasons: Optional[Dict[int, list]] = {}
seasons: Optional[Dict[int, list]] = Field(default_factory=dict)
# 媒体服务器类型plex、jellyfin、emby
server_type: Optional[str] = None
# 媒体服务器名称
@@ -29,7 +29,7 @@ class NotExistMediaInfo(BaseModel):
# 季
season: Optional[int] = None
# 剧集列表
episodes: Optional[list] = []
episodes: Optional[list] = Field(default_factory=list)
# 总集数
total_episode: Optional[int] = 0
# 开始集
@@ -132,7 +132,7 @@ class MediaServerSeasonInfo(BaseModel):
媒体服务器媒体剧集信息
"""
season: Optional[int] = None
episodes: Optional[List[int]] = []
episodes: Optional[List[int]] = Field(default_factory=list)
class WebhookEventInfo(BaseModel):
@@ -173,4 +173,4 @@ class MediaServerPlayItem(BaseModel):
image: Optional[str] = None
link: Optional[str] = None
percent: Optional[float] = None
BackdropImageTags: Optional[list] = []
BackdropImageTags: Optional[list] = Field(default_factory=list)

View File

@@ -1,6 +1,6 @@
from typing import Optional, Union
from pydantic import BaseModel
from pydantic import BaseModel, Field
from app.schemas.types import NotificationType, MessageChannel
@@ -101,7 +101,7 @@ class Subscription(BaseModel):
客户端消息订阅
"""
endpoint: Optional[str]
keys: Optional[dict] = {}
keys: Optional[dict] = Field(default_factory=dict)
class SubscriptionMessage(BaseModel):
@@ -112,4 +112,4 @@ class SubscriptionMessage(BaseModel):
body: Optional[str]
icon: Optional[str]
url: Optional[str]
data: Optional[dict] = {}
data: Optional[dict] = Field(default_factory=dict)

View File

@@ -1,6 +1,6 @@
from typing import Optional, List
from pydantic import BaseModel
from pydantic import BaseModel, Field
class Plugin(BaseModel):
@@ -43,7 +43,7 @@ class Plugin(BaseModel):
# 安装次数
install_count: Optional[int] = 0
# 更新记录
history: Optional[dict] = {}
history: Optional[dict] = Field(default_factory=dict)
# 添加时间,值越小表示越靠后发布
add_time: Optional[int] = 0
# 插件公钥
@@ -60,8 +60,8 @@ class PluginDashboard(Plugin):
# 仪表板key
key: Optional[str] = None
# 全局配置
attrs: Optional[dict] = {}
attrs: Optional[dict] = Field(default_factory=dict)
# col列数
cols: Optional[dict] = {}
cols: Optional[dict] = Field(default_factory=dict)
# 页面元素
elements: Optional[List[dict]] = []
elements: Optional[List[dict]] = Field(default_factory=list)

View File

@@ -1,6 +1,6 @@
from typing import Optional, Union
from pydantic import BaseModel
from pydantic import BaseModel, Field
class Response(BaseModel):
@@ -9,4 +9,4 @@ class Response(BaseModel):
# 消息文本
message: Optional[str] = None
# 数据
data: Optional[Union[dict, list]] = {}
data: Optional[Union[dict, list]] = Field(default_factory=dict)

View File

@@ -1,5 +1,5 @@
from typing import Optional
from pydantic import BaseModel
from pydantic import BaseModel, Field
class RadarrMovie(BaseModel):
@@ -28,9 +28,9 @@ class SonarrSeries(BaseModel):
overview: Optional[str]
network: Optional[str]
airTime: Optional[str]
images: list = []
images: list = Field(default_factory=list)
remotePoster: Optional[str]
seasons: list = []
seasons: list = Field(default_factory=list)
year: Optional[str]
path: Optional[str]
profileId: Optional[int]
@@ -49,9 +49,9 @@ class SonarrSeries(BaseModel):
cleanTitle: Optional[str]
titleSlug: Optional[str]
certification: Optional[str]
genres: list = []
tags: list = []
genres: list = Field(default_factory=list)
tags: list = Field(default_factory=list)
added: Optional[str]
ratings: Optional[dict]
qualityProfileId: Optional[int]
statistics: dict = {}
statistics: dict = Field(default_factory=dict)

View File

@@ -1,6 +1,6 @@
from typing import Optional, Any, Union, Dict
from pydantic import BaseModel
from pydantic import BaseModel, Field
class Site(BaseModel):
@@ -99,11 +99,11 @@ class SiteUserData(BaseModel):
# 下载体积
leeching_size: Optional[int] = 0
# 做种人数, 种子大小
seeding_info: Optional[list] = []
seeding_info: Optional[list] = Field(default_factory=list)
# 未读消息
message_unread: Optional[int] = 0
# 未读消息内容
message_unread_contents: Optional[list] = []
message_unread_contents: Optional[list] = Field(default_factory=list)
# 错误信息
err_msg: Optional[str] = None
# 更新日期
@@ -114,4 +114,4 @@ class SiteUserData(BaseModel):
class SiteAuth(BaseModel):
site: Optional[str] = None
params: Optional[Dict[str, Union[int, str]]] = {}
params: Optional[Dict[str, Union[int, str]]] = Field(default_factory=dict)

View File

@@ -1,6 +1,6 @@
from typing import Optional, List, Dict, Any
from pydantic import BaseModel
from pydantic import BaseModel, Field
class Subscribe(BaseModel):
@@ -53,7 +53,7 @@ class Subscribe(BaseModel):
# 订阅用户
username: Optional[str] = None
# 订阅站点
sites: Optional[List[int]] = []
sites: Optional[List[int]] = Field(default_factory=list)
# 下载器
downloader: Optional[str] = None
# 是否洗版
@@ -71,7 +71,7 @@ class Subscribe(BaseModel):
# 自定义媒体类别
media_category: Optional[str] = None
# 过滤规则组
filter_groups: Optional[List[str]] = []
filter_groups: Optional[List[str]] = Field(default_factory=list)
class Config:
orm_mode = True
@@ -157,13 +157,13 @@ class SubscribeEpisodeInfo(BaseModel):
# 背景图
backdrop: Optional[str] = None
# 下载文件信息
download: Optional[List[SubscribeDownloadFileInfo]] = []
download: Optional[List[SubscribeDownloadFileInfo]] = Field(default_factory=list)
# 媒体库文件信息
library: Optional[List[SubscribeLibraryFileInfo]] = []
library: Optional[List[SubscribeLibraryFileInfo]] = Field(default_factory=list)
class SubscrbieInfo(BaseModel):
# 订阅信息
subscribe: Optional[Subscribe] = None
# 集信息 {集号: {download: 文件路径library: 文件路径, backdrop: url, title: 标题, description: 描述}}
episodes: Optional[Dict[int, SubscribeEpisodeInfo]] = {}
episodes: Optional[Dict[int, SubscribeEpisodeInfo]] = Field(default_factory=dict)

View File

@@ -1,7 +1,7 @@
from dataclasses import dataclass
from typing import Optional, Any
from pydantic import BaseModel
from pydantic import BaseModel, Field
@dataclass
@@ -30,11 +30,11 @@ class MediaServerConf(BaseModel):
# 类型 emby/jellyfin/plex
type: Optional[str] = None
# 配置
config: Optional[dict] = {}
config: Optional[dict] = Field(default_factory=dict)
# 是否启用
enabled: Optional[bool] = False
# 同步媒体体库列表
sync_libraries: Optional[list] = []
sync_libraries: Optional[list] = Field(default_factory=list)
class DownloaderConf(BaseModel):
@@ -48,7 +48,7 @@ class DownloaderConf(BaseModel):
# 是否默认
default: Optional[bool] = False
# 配置
config: Optional[dict] = {}
config: Optional[dict] = Field(default_factory=dict)
# 是否启用
enabled: Optional[bool] = False
@@ -62,9 +62,9 @@ class NotificationConf(BaseModel):
# 类型 telegram/wechat/vocechat/synologychat/slack/webpush
type: Optional[str] = None
# 配置
config: Optional[dict] = {}
config: Optional[dict] = Field(default_factory=dict)
# 场景开关
switchs: Optional[list] = []
switchs: Optional[list] = Field(default_factory=list)
# 是否启用
enabled: Optional[bool] = False
@@ -88,7 +88,7 @@ class StorageConf(BaseModel):
# 名称
name: Optional[str] = None
# 配置
config: Optional[dict] = {}
config: Optional[dict] = Field(default_factory=dict)
class TransferDirectoryConf(BaseModel):

View File

@@ -1,6 +1,6 @@
from typing import Optional
from pydantic import BaseModel
from pydantic import BaseModel, Field
class TmdbSeason(BaseModel):
@@ -28,5 +28,5 @@ class TmdbEpisode(BaseModel):
season_number: Optional[int] = None
still_path: Optional[str] = None
vote_average: Optional[float] = None
crew: Optional[list] = []
guest_stars: Optional[list] = []
crew: Optional[list] = Field(default_factory=list)
guest_stars: Optional[list] = Field(default_factory=list)

View File

@@ -1,8 +1,9 @@
from pathlib import Path
from typing import Optional
from pydantic import BaseModel
from pydantic import BaseModel, Field
from app.core.meta import MetaBase
from app.schemas.file import FileItem
@@ -34,15 +35,23 @@ class DownloadingTorrent(BaseModel):
state: Optional[str] = 'downloading'
upspeed: Optional[str] = None
dlspeed: Optional[str] = None
media: Optional[dict] = {}
media: Optional[dict] = Field(default_factory=dict)
userid: Optional[str] = None
username: Optional[str] = None
left_time: Optional[str] = None
class TransferTask(BaseModel):
"""
文件整理任务
"""
fileitem: Optional[FileItem] = None
meta: Optional[MetaBase] = None
class TransferInfo(BaseModel):
"""
文件转移结果信息
文件整理结果信息
"""
# 是否成功标志
success: bool = True
@@ -57,13 +66,13 @@ class TransferInfo(BaseModel):
# 处理文件数
file_count: Optional[int] = 0
# 处理文件清单
file_list: Optional[list] = []
file_list: Optional[list] = Field(default_factory=list)
# 目标文件清单
file_list_new: Optional[list] = []
file_list_new: Optional[list] = Field(default_factory=list)
# 总文件大小
total_size: Optional[float] = 0
# 失败清单
fail_list: Optional[list] = []
fail_list: Optional[list] = Field(default_factory=list)
# 错误信息
message: Optional[str] = None
# 是否需要刮削

View File

@@ -1,6 +1,6 @@
from typing import Optional
from pydantic import BaseModel
from pydantic import BaseModel, Field
# Shared properties
@@ -18,9 +18,9 @@ class UserBase(BaseModel):
# 是否开启二次验证
is_otp: Optional[bool] = False
# 权限
permissions: Optional[dict] = {}
permissions: Optional[dict] = Field(default_factory=dict)
# 个性化设置
settings: Optional[dict] = {}
settings: Optional[dict] = Field(default_factory=dict)
class Config:
orm_mode = True
@@ -31,7 +31,7 @@ class UserCreate(UserBase):
name: str
email: Optional[str] = None
password: Optional[str] = None
settings: Optional[dict] = {}
settings: Optional[dict] = Field(default_factory=dict)
# Properties to receive via API on update
@@ -40,7 +40,7 @@ class UserUpdate(UserBase):
name: str
email: Optional[str] = None
password: Optional[str] = None
settings: Optional[dict] = {}
settings: Optional[dict] = Field(default_factory=dict)
class UserInDBBase(UserBase):