mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-03-20 03:57:30 +08:00
fix schemas default_factory
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
# 是否需要刮削
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user