feat:错误变量类型兼容
This commit is contained in:
parent
9f450dd8be
commit
b8fac86c6e
@ -3,7 +3,7 @@ import sys
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import List, Optional
|
from typing import List, Optional
|
||||||
|
|
||||||
from pydantic import BaseSettings
|
from pydantic import BaseSettings, validator
|
||||||
|
|
||||||
from app.utils.system import SystemUtils
|
from app.utils.system import SystemUtils
|
||||||
|
|
||||||
@ -32,7 +32,7 @@ class Settings(BaseSettings):
|
|||||||
# 是否开发模式
|
# 是否开发模式
|
||||||
DEV: bool = False
|
DEV: bool = False
|
||||||
# 配置文件目录
|
# 配置文件目录
|
||||||
CONFIG_DIR: str = None
|
CONFIG_DIR: Optional[str] = None
|
||||||
# 超级管理员
|
# 超级管理员
|
||||||
SUPERUSER: str = "admin"
|
SUPERUSER: str = "admin"
|
||||||
# API密钥,需要更换
|
# API密钥,需要更换
|
||||||
@ -40,7 +40,7 @@ class Settings(BaseSettings):
|
|||||||
# 登录页面电影海报,tmdb/bing
|
# 登录页面电影海报,tmdb/bing
|
||||||
WALLPAPER: str = "tmdb"
|
WALLPAPER: str = "tmdb"
|
||||||
# 网络代理 IP:PORT
|
# 网络代理 IP:PORT
|
||||||
PROXY_HOST: str = None
|
PROXY_HOST: Optional[str] = None
|
||||||
# 媒体识别来源 themoviedb/douban
|
# 媒体识别来源 themoviedb/douban
|
||||||
RECOGNIZE_SOURCE: str = "themoviedb"
|
RECOGNIZE_SOURCE: str = "themoviedb"
|
||||||
# 刮削来源 themoviedb/douban
|
# 刮削来源 themoviedb/douban
|
||||||
@ -82,27 +82,27 @@ class Settings(BaseSettings):
|
|||||||
# 用户认证站点
|
# 用户认证站点
|
||||||
AUTH_SITE: str = ""
|
AUTH_SITE: str = ""
|
||||||
# 交互搜索自动下载用户ID,使用,分割
|
# 交互搜索自动下载用户ID,使用,分割
|
||||||
AUTO_DOWNLOAD_USER: str = None
|
AUTO_DOWNLOAD_USER: Optional[str] = None
|
||||||
# 消息通知渠道 telegram/wechat/slack,多个通知渠道用,分隔
|
# 消息通知渠道 telegram/wechat/slack,多个通知渠道用,分隔
|
||||||
MESSAGER: str = "telegram"
|
MESSAGER: str = "telegram"
|
||||||
# WeChat企业ID
|
# WeChat企业ID
|
||||||
WECHAT_CORPID: str = None
|
WECHAT_CORPID: Optional[str] = None
|
||||||
# WeChat应用Secret
|
# WeChat应用Secret
|
||||||
WECHAT_APP_SECRET: str = None
|
WECHAT_APP_SECRET: Optional[str] = None
|
||||||
# WeChat应用ID
|
# WeChat应用ID
|
||||||
WECHAT_APP_ID: str = None
|
WECHAT_APP_ID: Optional[str] = None
|
||||||
# WeChat代理服务器
|
# WeChat代理服务器
|
||||||
WECHAT_PROXY: str = "https://qyapi.weixin.qq.com"
|
WECHAT_PROXY: str = "https://qyapi.weixin.qq.com"
|
||||||
# WeChat Token
|
# WeChat Token
|
||||||
WECHAT_TOKEN: str = None
|
WECHAT_TOKEN: Optional[str] = None
|
||||||
# WeChat EncodingAESKey
|
# WeChat EncodingAESKey
|
||||||
WECHAT_ENCODING_AESKEY: str = None
|
WECHAT_ENCODING_AESKEY: Optional[str] = None
|
||||||
# WeChat 管理员
|
# WeChat 管理员
|
||||||
WECHAT_ADMINS: str = None
|
WECHAT_ADMINS: Optional[str] = None
|
||||||
# Telegram Bot Token
|
# Telegram Bot Token
|
||||||
TELEGRAM_TOKEN: str = None
|
TELEGRAM_TOKEN: Optional[str] = None
|
||||||
# Telegram Chat ID
|
# Telegram Chat ID
|
||||||
TELEGRAM_CHAT_ID: str = None
|
TELEGRAM_CHAT_ID: Optional[str] = None
|
||||||
# Telegram 用户ID,使用,分隔
|
# Telegram 用户ID,使用,分隔
|
||||||
TELEGRAM_USERS: str = ""
|
TELEGRAM_USERS: str = ""
|
||||||
# Telegram 管理员ID,使用,分隔
|
# Telegram 管理员ID,使用,分隔
|
||||||
@ -122,11 +122,11 @@ class Settings(BaseSettings):
|
|||||||
# 下载器监控开关
|
# 下载器监控开关
|
||||||
DOWNLOADER_MONITOR: bool = True
|
DOWNLOADER_MONITOR: bool = True
|
||||||
# Qbittorrent地址,IP:PORT
|
# Qbittorrent地址,IP:PORT
|
||||||
QB_HOST: str = None
|
QB_HOST: Optional[str] = None
|
||||||
# Qbittorrent用户名
|
# Qbittorrent用户名
|
||||||
QB_USER: str = None
|
QB_USER: Optional[str] = None
|
||||||
# Qbittorrent密码
|
# Qbittorrent密码
|
||||||
QB_PASSWORD: str = None
|
QB_PASSWORD: Optional[str] = None
|
||||||
# Qbittorrent分类自动管理
|
# Qbittorrent分类自动管理
|
||||||
QB_CATEGORY: bool = False
|
QB_CATEGORY: bool = False
|
||||||
# Qbittorrent按顺序下载
|
# Qbittorrent按顺序下载
|
||||||
@ -134,21 +134,21 @@ class Settings(BaseSettings):
|
|||||||
# Qbittorrent忽略队列限制,强制继续
|
# Qbittorrent忽略队列限制,强制继续
|
||||||
QB_FORCE_RESUME: bool = False
|
QB_FORCE_RESUME: bool = False
|
||||||
# Transmission地址,IP:PORT
|
# Transmission地址,IP:PORT
|
||||||
TR_HOST: str = None
|
TR_HOST: Optional[str] = None
|
||||||
# Transmission用户名
|
# Transmission用户名
|
||||||
TR_USER: str = None
|
TR_USER: Optional[str] = None
|
||||||
# Transmission密码
|
# Transmission密码
|
||||||
TR_PASSWORD: str = None
|
TR_PASSWORD: Optional[str] = None
|
||||||
# 种子标签
|
# 种子标签
|
||||||
TORRENT_TAG: str = "MOVIEPILOT"
|
TORRENT_TAG: str = "MOVIEPILOT"
|
||||||
# 下载保存目录,容器内映射路径需要一致
|
# 下载保存目录,容器内映射路径需要一致
|
||||||
DOWNLOAD_PATH: str = None
|
DOWNLOAD_PATH: Optional[str] = None
|
||||||
# 电影下载保存目录,容器内映射路径需要一致
|
# 电影下载保存目录,容器内映射路径需要一致
|
||||||
DOWNLOAD_MOVIE_PATH: str = None
|
DOWNLOAD_MOVIE_PATH: Optional[str] = None
|
||||||
# 电视剧下载保存目录,容器内映射路径需要一致
|
# 电视剧下载保存目录,容器内映射路径需要一致
|
||||||
DOWNLOAD_TV_PATH: str = None
|
DOWNLOAD_TV_PATH: Optional[str] = None
|
||||||
# 动漫下载保存目录,容器内映射路径需要一致
|
# 动漫下载保存目录,容器内映射路径需要一致
|
||||||
DOWNLOAD_ANIME_PATH: str = None
|
DOWNLOAD_ANIME_PATH: Optional[str] = None
|
||||||
# 下载目录二级分类
|
# 下载目录二级分类
|
||||||
DOWNLOAD_CATEGORY: bool = False
|
DOWNLOAD_CATEGORY: bool = False
|
||||||
# 下载站点字幕
|
# 下载站点字幕
|
||||||
@ -158,33 +158,33 @@ class Settings(BaseSettings):
|
|||||||
# 媒体服务器同步间隔(小时)
|
# 媒体服务器同步间隔(小时)
|
||||||
MEDIASERVER_SYNC_INTERVAL: Optional[int] = 6
|
MEDIASERVER_SYNC_INTERVAL: Optional[int] = 6
|
||||||
# 媒体服务器同步黑名单,多个媒体库名称,分割
|
# 媒体服务器同步黑名单,多个媒体库名称,分割
|
||||||
MEDIASERVER_SYNC_BLACKLIST: str = None
|
MEDIASERVER_SYNC_BLACKLIST: Optional[str] = None
|
||||||
# EMBY服务器地址,IP:PORT
|
# EMBY服务器地址,IP:PORT
|
||||||
EMBY_HOST: str = None
|
EMBY_HOST: Optional[str] = None
|
||||||
# EMBY外网地址,http(s)://DOMAIN:PORT,未设置时使用EMBY_HOST
|
# EMBY外网地址,http(s)://DOMAIN:PORT,未设置时使用EMBY_HOST
|
||||||
EMBY_PLAY_HOST: str = None
|
EMBY_PLAY_HOST: Optional[str] = None
|
||||||
# EMBY Api Key
|
# EMBY Api Key
|
||||||
EMBY_API_KEY: str = None
|
EMBY_API_KEY: Optional[str] = None
|
||||||
# Jellyfin服务器地址,IP:PORT
|
# Jellyfin服务器地址,IP:PORT
|
||||||
JELLYFIN_HOST: str = None
|
JELLYFIN_HOST: Optional[str] = None
|
||||||
# Jellyfin外网地址,http(s)://DOMAIN:PORT,未设置时使用JELLYFIN_HOST
|
# Jellyfin外网地址,http(s)://DOMAIN:PORT,未设置时使用JELLYFIN_HOST
|
||||||
JELLYFIN_PLAY_HOST: str = None
|
JELLYFIN_PLAY_HOST: Optional[str] = None
|
||||||
# Jellyfin Api Key
|
# Jellyfin Api Key
|
||||||
JELLYFIN_API_KEY: str = None
|
JELLYFIN_API_KEY: Optional[str] = None
|
||||||
# Plex服务器地址,IP:PORT
|
# Plex服务器地址,IP:PORT
|
||||||
PLEX_HOST: str = None
|
PLEX_HOST: Optional[str] = None
|
||||||
# Plex外网地址,http(s)://DOMAIN:PORT,未设置时使用PLEX_HOST
|
# Plex外网地址,http(s)://DOMAIN:PORT,未设置时使用PLEX_HOST
|
||||||
PLEX_PLAY_HOST: str = None
|
PLEX_PLAY_HOST: Optional[str] = None
|
||||||
# Plex Token
|
# Plex Token
|
||||||
PLEX_TOKEN: str = None
|
PLEX_TOKEN: Optional[str] = None
|
||||||
# 转移方式 link/copy/move/softlink
|
# 转移方式 link/copy/move/softlink
|
||||||
TRANSFER_TYPE: str = "copy"
|
TRANSFER_TYPE: str = "copy"
|
||||||
# CookieCloud服务器地址
|
# CookieCloud服务器地址
|
||||||
COOKIECLOUD_HOST: str = "https://movie-pilot.org/cookiecloud"
|
COOKIECLOUD_HOST: str = "https://movie-pilot.org/cookiecloud"
|
||||||
# CookieCloud用户KEY
|
# CookieCloud用户KEY
|
||||||
COOKIECLOUD_KEY: str = None
|
COOKIECLOUD_KEY: Optional[str] = None
|
||||||
# CookieCloud端对端加密密码
|
# CookieCloud端对端加密密码
|
||||||
COOKIECLOUD_PASSWORD: str = None
|
COOKIECLOUD_PASSWORD: Optional[str] = None
|
||||||
# CookieCloud同步间隔(分钟)
|
# CookieCloud同步间隔(分钟)
|
||||||
COOKIECLOUD_INTERVAL: Optional[int] = 60 * 24
|
COOKIECLOUD_INTERVAL: Optional[int] = 60 * 24
|
||||||
# OCR服务器地址
|
# OCR服务器地址
|
||||||
@ -192,13 +192,13 @@ class Settings(BaseSettings):
|
|||||||
# CookieCloud对应的浏览器UA
|
# 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 = "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"
|
||||||
# 媒体库目录,多个目录使用,分隔
|
# 媒体库目录,多个目录使用,分隔
|
||||||
LIBRARY_PATH: str = None
|
LIBRARY_PATH: Optional[str] = None
|
||||||
# 电影媒体库目录名
|
# 电影媒体库目录名
|
||||||
LIBRARY_MOVIE_NAME: str = "电影"
|
LIBRARY_MOVIE_NAME: str = "电影"
|
||||||
# 电视剧媒体库目录名
|
# 电视剧媒体库目录名
|
||||||
LIBRARY_TV_NAME: str = "电视剧"
|
LIBRARY_TV_NAME: str = "电视剧"
|
||||||
# 动漫媒体库目录名,不设置时使用电视剧目录
|
# 动漫媒体库目录名,不设置时使用电视剧目录
|
||||||
LIBRARY_ANIME_NAME: str = None
|
LIBRARY_ANIME_NAME: Optional[str] = None
|
||||||
# 二级分类
|
# 二级分类
|
||||||
LIBRARY_CATEGORY: bool = True
|
LIBRARY_CATEGORY: bool = True
|
||||||
# 电视剧动漫的分类genre_ids
|
# 电视剧动漫的分类genre_ids
|
||||||
@ -219,10 +219,37 @@ class Settings(BaseSettings):
|
|||||||
# 插件市场仓库地址,多个地址使用,分隔,地址以/结尾
|
# 插件市场仓库地址,多个地址使用,分隔,地址以/结尾
|
||||||
PLUGIN_MARKET: str = "https://github.com/jxxghp/MoviePilot-Plugins"
|
PLUGIN_MARKET: str = "https://github.com/jxxghp/MoviePilot-Plugins"
|
||||||
# Github token,提高请求api限流阈值 ghp_****
|
# Github token,提高请求api限流阈值 ghp_****
|
||||||
GITHUB_TOKEN: str = None
|
GITHUB_TOKEN: Optional[str] = None
|
||||||
# 自动检查和更新站点资源包(站点索引、认证等)
|
# 自动检查和更新站点资源包(站点索引、认证等)
|
||||||
AUTO_UPDATE_RESOURCE: bool = True
|
AUTO_UPDATE_RESOURCE: bool = True
|
||||||
|
|
||||||
|
@validator("SUBSCRIBE_RSS_INTERVAL", pre=True, always=True)
|
||||||
|
def convert_rss_interval(cls, value):
|
||||||
|
if not value:
|
||||||
|
return 0
|
||||||
|
try:
|
||||||
|
return int(value)
|
||||||
|
except (ValueError, TypeError):
|
||||||
|
raise ValueError("SUBSCRIBE_RSS_INTERVAL设置有误,不是数字!")
|
||||||
|
|
||||||
|
@validator("COOKIECLOUD_INTERVAL", pre=True, always=True)
|
||||||
|
def convert_cookiecloud_interval(cls, value):
|
||||||
|
if not value:
|
||||||
|
return 0
|
||||||
|
try:
|
||||||
|
return int(value)
|
||||||
|
except (ValueError, TypeError):
|
||||||
|
raise ValueError("COOKIECLOUD_INTERVAL设置有误,不是数字!")
|
||||||
|
|
||||||
|
@validator("MEDIASERVER_SYNC_INTERVAL", pre=True, always=True)
|
||||||
|
def convert_mediaserver_sync_interval(cls, value):
|
||||||
|
if not value:
|
||||||
|
return 0
|
||||||
|
try:
|
||||||
|
return int(value)
|
||||||
|
except (ValueError, TypeError):
|
||||||
|
raise ValueError("MEDIASERVER_SYNC_INTERVAL设置有误,不是数字!")
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def INNER_CONFIG_PATH(self):
|
def INNER_CONFIG_PATH(self):
|
||||||
return self.ROOT_PATH / "config"
|
return self.ROOT_PATH / "config"
|
||||||
|
@ -93,13 +93,14 @@ class Scheduler(metaclass=Singleton):
|
|||||||
return
|
return
|
||||||
|
|
||||||
# CookieCloud定时同步
|
# CookieCloud定时同步
|
||||||
if settings.COOKIECLOUD_INTERVAL:
|
if settings.COOKIECLOUD_INTERVAL \
|
||||||
|
and str(settings.COOKIECLOUD_INTERVAL).isdigit():
|
||||||
self._scheduler.add_job(
|
self._scheduler.add_job(
|
||||||
self.start,
|
self.start,
|
||||||
"interval",
|
"interval",
|
||||||
id="cookiecloud",
|
id="cookiecloud",
|
||||||
name="同步CookieCloud站点",
|
name="同步CookieCloud站点",
|
||||||
minutes=settings.COOKIECLOUD_INTERVAL,
|
minutes=int(settings.COOKIECLOUD_INTERVAL),
|
||||||
next_run_time=datetime.now(pytz.timezone(settings.TZ)) + timedelta(minutes=1),
|
next_run_time=datetime.now(pytz.timezone(settings.TZ)) + timedelta(minutes=1),
|
||||||
kwargs={
|
kwargs={
|
||||||
'job_id': 'cookiecloud'
|
'job_id': 'cookiecloud'
|
||||||
@ -107,13 +108,14 @@ class Scheduler(metaclass=Singleton):
|
|||||||
)
|
)
|
||||||
|
|
||||||
# 媒体服务器同步
|
# 媒体服务器同步
|
||||||
if settings.MEDIASERVER_SYNC_INTERVAL:
|
if settings.MEDIASERVER_SYNC_INTERVAL \
|
||||||
|
and str(settings.MEDIASERVER_SYNC_INTERVAL).isdigit():
|
||||||
self._scheduler.add_job(
|
self._scheduler.add_job(
|
||||||
self.start,
|
self.start,
|
||||||
"interval",
|
"interval",
|
||||||
id="mediaserver_sync",
|
id="mediaserver_sync",
|
||||||
name="同步媒体服务器",
|
name="同步媒体服务器",
|
||||||
hours=settings.MEDIASERVER_SYNC_INTERVAL,
|
hours=int(settings.MEDIASERVER_SYNC_INTERVAL),
|
||||||
next_run_time=datetime.now(pytz.timezone(settings.TZ)) + timedelta(minutes=5),
|
next_run_time=datetime.now(pytz.timezone(settings.TZ)) + timedelta(minutes=5),
|
||||||
kwargs={
|
kwargs={
|
||||||
'job_id': 'mediaserver_sync'
|
'job_id': 'mediaserver_sync'
|
||||||
@ -173,16 +175,17 @@ class Scheduler(metaclass=Singleton):
|
|||||||
})
|
})
|
||||||
else:
|
else:
|
||||||
# RSS订阅模式
|
# RSS订阅模式
|
||||||
if not settings.SUBSCRIBE_RSS_INTERVAL:
|
if not settings.SUBSCRIBE_RSS_INTERVAL \
|
||||||
|
or not str(settings.SUBSCRIBE_RSS_INTERVAL).isdigit():
|
||||||
settings.SUBSCRIBE_RSS_INTERVAL = 30
|
settings.SUBSCRIBE_RSS_INTERVAL = 30
|
||||||
elif settings.SUBSCRIBE_RSS_INTERVAL < 5:
|
elif int(settings.SUBSCRIBE_RSS_INTERVAL) < 5:
|
||||||
settings.SUBSCRIBE_RSS_INTERVAL = 5
|
settings.SUBSCRIBE_RSS_INTERVAL = 5
|
||||||
self._scheduler.add_job(
|
self._scheduler.add_job(
|
||||||
self.start,
|
self.start,
|
||||||
"interval",
|
"interval",
|
||||||
id="subscribe_refresh",
|
id="subscribe_refresh",
|
||||||
name="RSS订阅刷新",
|
name="RSS订阅刷新",
|
||||||
minutes=settings.SUBSCRIBE_RSS_INTERVAL,
|
minutes=int(settings.SUBSCRIBE_RSS_INTERVAL),
|
||||||
kwargs={
|
kwargs={
|
||||||
'job_id': 'subscribe_refresh'
|
'job_id': 'subscribe_refresh'
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user