fix
This commit is contained in:
parent
2e4536edb6
commit
3d34c26731
@ -48,7 +48,7 @@ def wechat_verify(echostr: str, msg_signature: str,
|
||||
sEncodingAESKey=settings.WECHAT_ENCODING_AESKEY,
|
||||
sReceiveId=settings.WECHAT_CORPID)
|
||||
except Exception as err:
|
||||
logger.error(f"微信请求验证失败: {err}")
|
||||
logger.error(f"微信请求验证失败: {str(err)}")
|
||||
return str(err)
|
||||
ret, sEchoStr = wxcpt.VerifyURL(sMsgSignature=msg_signature,
|
||||
sTimeStamp=timestamp,
|
||||
|
@ -45,7 +45,7 @@ class ChainBase(metaclass=ABCMeta):
|
||||
with open(cache_path, 'rb') as f:
|
||||
return pickle.load(f)
|
||||
except Exception as err:
|
||||
logger.error(f"加载缓存 {filename} 出错:{err}")
|
||||
logger.error(f"加载缓存 {filename} 出错:{str(err)}")
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
@ -57,7 +57,7 @@ class ChainBase(metaclass=ABCMeta):
|
||||
with open(settings.TEMP_PATH / filename, 'wb') as f:
|
||||
pickle.dump(cache, f)
|
||||
except Exception as err:
|
||||
logger.error(f"保存缓存 {filename} 出错:{err}")
|
||||
logger.error(f"保存缓存 {filename} 出错:{str(err)}")
|
||||
finally:
|
||||
# 主动资源回收
|
||||
del cache
|
||||
@ -107,7 +107,7 @@ class ChainBase(metaclass=ABCMeta):
|
||||
# 中止继续执行
|
||||
break
|
||||
except Exception as err:
|
||||
logger.error(f"运行模块 {method} 出错:{module.__class__.__name__} - {err}\n{traceback.print_exc()}")
|
||||
logger.error(f"运行模块 {method} 出错:{module.__class__.__name__} - {str(err)}\n{traceback.print_exc()}")
|
||||
return result
|
||||
|
||||
def recognize_media(self, meta: MetaBase = None,
|
||||
|
@ -161,4 +161,4 @@ class SystemChain(ChainBase, metaclass=Singleton):
|
||||
logger.warn("未找到版本号")
|
||||
return None
|
||||
except Exception as err:
|
||||
logger.error(f"加载版本文件 {version_file} 出错:{err}")
|
||||
logger.error(f"加载版本文件 {version_file} 出错:{str(err)}")
|
||||
|
@ -72,7 +72,7 @@ class PluginManager(metaclass=Singleton):
|
||||
# 设置事件注册状态可用
|
||||
eventmanager.enable_events_hander(plugin_id)
|
||||
except Exception as err:
|
||||
logger.error(f"加载插件 {plugin_id} 出错:{err} - {traceback.format_exc()}")
|
||||
logger.error(f"加载插件 {plugin_id} 出错:{str(err)} - {traceback.format_exc()}")
|
||||
|
||||
def reload_plugin(self, plugin_id: str, conf: dict):
|
||||
"""
|
||||
|
@ -45,4 +45,4 @@ def update_db():
|
||||
alembic_cfg.set_main_option('sqlalchemy.url', f"sqlite:///{db_location}")
|
||||
upgrade(alembic_cfg, 'head')
|
||||
except Exception as e:
|
||||
logger.error(f'数据库更新失败:{e}')
|
||||
logger.error(f'数据库更新失败:{str(e)}')
|
||||
|
@ -16,7 +16,12 @@ def db_persist(func):
|
||||
|
||||
def wrapper(*args, **kwargs):
|
||||
with DBLock:
|
||||
db: Session = kwargs.get("db") or args[1]
|
||||
db: Session = kwargs.get("db")
|
||||
if not db:
|
||||
for arg in args:
|
||||
if isinstance(arg, Session):
|
||||
db = arg
|
||||
break
|
||||
try:
|
||||
if db:
|
||||
db.close()
|
||||
|
@ -49,11 +49,11 @@ class PlaywrightHelper:
|
||||
# 回调函数
|
||||
return callback(page)
|
||||
except Exception as e:
|
||||
logger.error(f"网页操作失败: {e}")
|
||||
logger.error(f"网页操作失败: {str(e)}")
|
||||
finally:
|
||||
browser.close()
|
||||
except Exception as e:
|
||||
logger.error(f"网页操作失败: {e}")
|
||||
logger.error(f"网页操作失败: {str(e)}")
|
||||
return None
|
||||
|
||||
def get_page_source(self, url: str,
|
||||
@ -85,12 +85,12 @@ class PlaywrightHelper:
|
||||
page.wait_for_load_state("networkidle", timeout=timeout * 1000)
|
||||
source = page.content()
|
||||
except Exception as e:
|
||||
logger.error(f"获取网页源码失败: {e}")
|
||||
logger.error(f"获取网页源码失败: {str(e)}")
|
||||
source = None
|
||||
finally:
|
||||
browser.close()
|
||||
except Exception as e:
|
||||
logger.error(f"获取网页源码失败: {e}")
|
||||
logger.error(f"获取网页源码失败: {str(e)}")
|
||||
return source
|
||||
|
||||
|
||||
|
@ -162,8 +162,8 @@ class CookieHelper:
|
||||
page.click(submit_xpath)
|
||||
page.wait_for_load_state("networkidle", timeout=30 * 1000)
|
||||
except Exception as e:
|
||||
logger.error(f"仿真登录失败:{e}")
|
||||
return None, None, f"仿真登录失败:{e}"
|
||||
logger.error(f"仿真登录失败:{str(e)}")
|
||||
return None, None, f"仿真登录失败:{str(e)}"
|
||||
# 登录后的源码
|
||||
html_text = page.content()
|
||||
if not html_text:
|
||||
|
@ -15,7 +15,7 @@ class DisplayHelper(metaclass=Singleton):
|
||||
self._display = Display(visible=False, size=(1024, 768))
|
||||
self._display.start()
|
||||
except Exception as err:
|
||||
logger.error(f"DisplayHelper init error: {err}")
|
||||
logger.error(f"DisplayHelper init error: {str(err)}")
|
||||
|
||||
def stop(self):
|
||||
if self._display:
|
||||
|
@ -95,7 +95,7 @@ class TorrentHelper:
|
||||
logger.warn(f"触发了站点首次种子下载,且无法自动跳过:{url}")
|
||||
break
|
||||
except Exception as err:
|
||||
logger.warn(f"触发了站点首次种子下载,尝试自动跳过时出现错误:{err},链接:{url}")
|
||||
logger.warn(f"触发了站点首次种子下载,尝试自动跳过时出现错误:{str(err)},链接:{url}")
|
||||
if not skip_flag:
|
||||
return None, None, "", [], "种子数据有误,请确认链接是否正确,如为PT站点则需手工在站点下载一次种子"
|
||||
# 种子内容
|
||||
@ -113,7 +113,7 @@ class TorrentHelper:
|
||||
# 成功拿到种子数据
|
||||
return file_path, req.content, folder_name, file_list, ""
|
||||
except Exception as err:
|
||||
logger.error(f"种子文件解析失败:{err}")
|
||||
logger.error(f"种子文件解析失败:{str(err)}")
|
||||
# 种子数据仍然错误
|
||||
return None, None, "", [], "种子数据有误,请确认链接是否正确"
|
||||
# 返回失败
|
||||
@ -160,7 +160,7 @@ class TorrentHelper:
|
||||
logger.debug(f"解析种子:{torrent_path.name} => 目录:{folder_name},文件清单:{file_list}")
|
||||
return folder_name, file_list
|
||||
except Exception as err:
|
||||
logger.error(f"种子文件解析失败:{err}")
|
||||
logger.error(f"种子文件解析失败:{str(err)}")
|
||||
return "", []
|
||||
|
||||
@staticmethod
|
||||
|
@ -530,5 +530,5 @@ class DoubanModule(_ModuleBase):
|
||||
file_path=file,
|
||||
transfer_type=transfer_type)
|
||||
except Exception as e:
|
||||
logger.error(f"刮削文件 {file} 失败,原因:{e}")
|
||||
logger.error(f"刮削文件 {file} 失败,原因:{str(e)}")
|
||||
logger.info(f"{path} 刮削完成")
|
||||
|
@ -57,7 +57,7 @@ class DoubanScraper:
|
||||
season=meta.begin_season,
|
||||
season_path=file_path.parent)
|
||||
except Exception as e:
|
||||
logger.error(f"{file_path} 刮削失败:{e}")
|
||||
logger.error(f"{file_path} 刮削失败:{str(e)}")
|
||||
|
||||
@staticmethod
|
||||
def __gen_common_nfo(mediainfo: MediaInfo, doc, root):
|
||||
@ -187,7 +187,7 @@ class DoubanScraper:
|
||||
else:
|
||||
logger.info(f"{file_path.stem}图片下载失败,请检查网络连通性")
|
||||
except Exception as err:
|
||||
logger.error(f"{file_path.stem}图片下载失败:{err}")
|
||||
logger.error(f"{file_path.stem}图片下载失败:{str(err)}")
|
||||
|
||||
def __save_nfo(self, doc, file_path: Path):
|
||||
"""
|
||||
|
@ -382,5 +382,5 @@ class FanartModule(_ModuleBase):
|
||||
if ret:
|
||||
return ret.json()
|
||||
except Exception as err:
|
||||
logger.error(f"获取{queryid}的Fanart图片失败:{err}")
|
||||
logger.error(f"获取{queryid}的Fanart图片失败:{str(err)}")
|
||||
return None
|
||||
|
@ -590,7 +590,7 @@ class FileTransferModule(_ModuleBase):
|
||||
if path.is_relative_to(libpath):
|
||||
return libpath
|
||||
except Exception as e:
|
||||
logger.debug(f"计算媒体库路径时出错:{e}")
|
||||
logger.debug(f"计算媒体库路径时出错:{str(e)}")
|
||||
continue
|
||||
return path
|
||||
|
||||
@ -618,7 +618,7 @@ class FileTransferModule(_ModuleBase):
|
||||
max_length = len(relative)
|
||||
target_path = path
|
||||
except Exception as e:
|
||||
logger.debug(f"计算目标路径时出错:{e}")
|
||||
logger.debug(f"计算目标路径时出错:{str(e)}")
|
||||
continue
|
||||
if target_path:
|
||||
return target_path
|
||||
|
@ -92,7 +92,7 @@ class IndexerModule(_ModuleBase):
|
||||
if result_array:
|
||||
break
|
||||
except Exception as err:
|
||||
logger.error(f"{site.get('name')} 搜索出错:{err}")
|
||||
logger.error(f"{site.get('name')} 搜索出错:{str(err)}")
|
||||
|
||||
# 索引花费的时间
|
||||
seconds = round((datetime.now() - start_time).seconds, 1)
|
||||
|
@ -254,7 +254,7 @@ class TorrentSpider:
|
||||
# 解码为字符串
|
||||
page_source = raw_data.decode(encoding)
|
||||
except Exception as e:
|
||||
logger.debug(f"chardet解码失败:{e}")
|
||||
logger.debug(f"chardet解码失败:{str(e)}")
|
||||
# 探测utf-8解码
|
||||
if re.search(r"charset=\"?utf-8\"?", ret.text, re.IGNORECASE):
|
||||
ret.encoding = "utf-8"
|
||||
@ -661,4 +661,4 @@ class TorrentSpider:
|
||||
return self.torrents_info_array
|
||||
except Exception as err:
|
||||
self.is_error = True
|
||||
logger.warn(f"错误:{self.indexername} {err}")
|
||||
logger.warn(f"错误:{self.indexername} {str(err)}")
|
||||
|
@ -284,7 +284,7 @@ class Plex(metaclass=Singleton):
|
||||
if is_subpath(path, Path(location)):
|
||||
return lib.key, str(path)
|
||||
except Exception as err:
|
||||
logger.error(f"查找媒体库出错:{err}")
|
||||
logger.error(f"查找媒体库出错:{str(err)}")
|
||||
return "", ""
|
||||
|
||||
def get_iteminfo(self, itemid: str) -> Optional[schemas.MediaServerItem]:
|
||||
@ -313,7 +313,7 @@ class Plex(metaclass=Singleton):
|
||||
path=path,
|
||||
)
|
||||
except Exception as err:
|
||||
logger.error(f"获取项目详情出错:{err}")
|
||||
logger.error(f"获取项目详情出错:{str(err)}")
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
@ -372,7 +372,7 @@ class Plex(metaclass=Singleton):
|
||||
path=path,
|
||||
)
|
||||
except Exception as err:
|
||||
logger.error(f"获取媒体库列表出错:{err}")
|
||||
logger.error(f"获取媒体库列表出错:{str(err)}")
|
||||
yield None
|
||||
|
||||
def get_webhook_message(self, form: any) -> Optional[schemas.WebhookEventInfo]:
|
||||
|
@ -57,10 +57,10 @@ class Qbittorrent(metaclass=Singleton):
|
||||
try:
|
||||
qbt.auth_log_in()
|
||||
except qbittorrentapi.LoginFailed as e:
|
||||
logger.error(f"qbittorrent 登录失败:{e}")
|
||||
logger.error(f"qbittorrent 登录失败:{str(e)}")
|
||||
return qbt
|
||||
except Exception as err:
|
||||
logger.error(f"qbittorrent 连接出错:{err}")
|
||||
logger.error(f"qbittorrent 连接出错:{str(err)}")
|
||||
return None
|
||||
|
||||
def get_torrents(self, ids: Union[str, list] = None,
|
||||
@ -86,7 +86,7 @@ class Qbittorrent(metaclass=Singleton):
|
||||
return results, False
|
||||
return torrents or [], False
|
||||
except Exception as err:
|
||||
logger.error(f"获取种子列表出错:{err}")
|
||||
logger.error(f"获取种子列表出错:{str(err)}")
|
||||
return [], True
|
||||
|
||||
def get_completed_torrents(self, ids: Union[str, list] = None,
|
||||
@ -126,7 +126,7 @@ class Qbittorrent(metaclass=Singleton):
|
||||
self.qbc.torrents_delete_tags(torrent_hashes=ids, tags=tag)
|
||||
return True
|
||||
except Exception as err:
|
||||
logger.error(f"移除种子Tag出错:{err}")
|
||||
logger.error(f"移除种子Tag出错:{str(err)}")
|
||||
return False
|
||||
|
||||
def set_torrents_tag(self, ids: Union[str, list], tags: list):
|
||||
@ -139,7 +139,7 @@ class Qbittorrent(metaclass=Singleton):
|
||||
# 打标签
|
||||
self.qbc.torrents_add_tags(tags=tags, torrent_hashes=ids)
|
||||
except Exception as err:
|
||||
logger.error(f"设置种子Tag出错:{err}")
|
||||
logger.error(f"设置种子Tag出错:{str(err)}")
|
||||
|
||||
def torrents_set_force_start(self, ids: Union[str, list]):
|
||||
"""
|
||||
@ -150,7 +150,7 @@ class Qbittorrent(metaclass=Singleton):
|
||||
try:
|
||||
self.qbc.torrents_set_force_start(enable=True, torrent_hashes=ids)
|
||||
except Exception as err:
|
||||
logger.error(f"设置强制作种出错:{err}")
|
||||
logger.error(f"设置强制作种出错:{str(err)}")
|
||||
|
||||
def __get_last_add_torrentid_by_tag(self, tags: Union[str, list],
|
||||
status: Union[str, list] = None) -> Optional[str]:
|
||||
@ -161,7 +161,7 @@ class Qbittorrent(metaclass=Singleton):
|
||||
try:
|
||||
torrents, _ = self.get_torrents(status=status, tags=tags)
|
||||
except Exception as err:
|
||||
logger.error(f"获取种子列表出错:{err}")
|
||||
logger.error(f"获取种子列表出错:{str(err)}")
|
||||
return None
|
||||
if torrents:
|
||||
return torrents[0].get("hash")
|
||||
@ -249,7 +249,7 @@ class Qbittorrent(metaclass=Singleton):
|
||||
**kwargs)
|
||||
return True if qbc_ret and str(qbc_ret).find("Ok") != -1 else False
|
||||
except Exception as err:
|
||||
logger.error(f"添加种子出错:{err}")
|
||||
logger.error(f"添加种子出错:{str(err)}")
|
||||
return False
|
||||
|
||||
def start_torrents(self, ids: Union[str, list]) -> bool:
|
||||
@ -262,7 +262,7 @@ class Qbittorrent(metaclass=Singleton):
|
||||
self.qbc.torrents_resume(torrent_hashes=ids)
|
||||
return True
|
||||
except Exception as err:
|
||||
logger.error(f"启动种子出错:{err}")
|
||||
logger.error(f"启动种子出错:{str(err)}")
|
||||
return False
|
||||
|
||||
def stop_torrents(self, ids: Union[str, list]) -> bool:
|
||||
@ -275,7 +275,7 @@ class Qbittorrent(metaclass=Singleton):
|
||||
self.qbc.torrents_pause(torrent_hashes=ids)
|
||||
return True
|
||||
except Exception as err:
|
||||
logger.error(f"暂停种子出错:{err}")
|
||||
logger.error(f"暂停种子出错:{str(err)}")
|
||||
return False
|
||||
|
||||
def delete_torrents(self, delete_file: bool, ids: Union[str, list]) -> bool:
|
||||
@ -290,7 +290,7 @@ class Qbittorrent(metaclass=Singleton):
|
||||
self.qbc.torrents_delete(delete_files=delete_file, torrent_hashes=ids)
|
||||
return True
|
||||
except Exception as err:
|
||||
logger.error(f"删除种子出错:{err}")
|
||||
logger.error(f"删除种子出错:{str(err)}")
|
||||
return False
|
||||
|
||||
def get_files(self, tid: str) -> Optional[TorrentFilesList]:
|
||||
@ -302,7 +302,7 @@ class Qbittorrent(metaclass=Singleton):
|
||||
try:
|
||||
return self.qbc.torrents_files(torrent_hash=tid)
|
||||
except Exception as err:
|
||||
logger.error(f"获取种子文件列表出错:{err}")
|
||||
logger.error(f"获取种子文件列表出错:{str(err)}")
|
||||
return None
|
||||
|
||||
def set_files(self, **kwargs) -> bool:
|
||||
@ -319,7 +319,7 @@ class Qbittorrent(metaclass=Singleton):
|
||||
priority=kwargs.get("priority"))
|
||||
return True
|
||||
except Exception as err:
|
||||
logger.error(f"设置种子文件状态出错:{err}")
|
||||
logger.error(f"设置种子文件状态出错:{str(err)}")
|
||||
return False
|
||||
|
||||
def transfer_info(self) -> Optional[TransferInfoDictionary]:
|
||||
@ -331,7 +331,7 @@ class Qbittorrent(metaclass=Singleton):
|
||||
try:
|
||||
return self.qbc.transfer_info()
|
||||
except Exception as err:
|
||||
logger.error(f"获取传输信息出错:{err}")
|
||||
logger.error(f"获取传输信息出错:{str(err)}")
|
||||
return None
|
||||
|
||||
def set_speed_limit(self, download_limit: float = None, upload_limit: float = None) -> bool:
|
||||
@ -349,7 +349,7 @@ class Qbittorrent(metaclass=Singleton):
|
||||
self.qbc.transfer.download_limit = int(download_limit)
|
||||
return True
|
||||
except Exception as err:
|
||||
logger.error(f"设置速度限制出错:{err}")
|
||||
logger.error(f"设置速度限制出错:{str(err)}")
|
||||
return False
|
||||
|
||||
def recheck_torrents(self, ids: Union[str, list]):
|
||||
@ -361,7 +361,7 @@ class Qbittorrent(metaclass=Singleton):
|
||||
try:
|
||||
return self.qbc.torrents_recheck(torrent_hashes=ids)
|
||||
except Exception as err:
|
||||
logger.error(f"重新校验种子出错:{err}")
|
||||
logger.error(f"重新校验种子出错:{str(err)}")
|
||||
return False
|
||||
|
||||
def add_trackers(self, ids: Union[str, list], trackers: list):
|
||||
@ -373,5 +373,5 @@ class Qbittorrent(metaclass=Singleton):
|
||||
try:
|
||||
return self.qbc.torrents_add_trackers(torrent_hashes=ids, urls=trackers)
|
||||
except Exception as err:
|
||||
logger.error(f"添加tracker出错:{err}")
|
||||
logger.error(f"添加tracker出错:{str(err)}")
|
||||
return False
|
||||
|
@ -151,7 +151,7 @@ class SlackModule(_ModuleBase):
|
||||
try:
|
||||
msg_json: dict = json.loads(body)
|
||||
except Exception as err:
|
||||
logger.debug(f"解析Slack消息失败:{err}")
|
||||
logger.debug(f"解析Slack消息失败:{str(err)}")
|
||||
return None
|
||||
if msg_json:
|
||||
if msg_json.get("type") == "message":
|
||||
|
@ -34,7 +34,7 @@ class Slack:
|
||||
ssl_check_enabled=False,
|
||||
url_verification_enabled=False)
|
||||
except Exception as err:
|
||||
logger.error(f"Slack初始化失败: {err}")
|
||||
logger.error(f"Slack初始化失败: {str(err)}")
|
||||
return
|
||||
self._client = slack_app.client
|
||||
|
||||
@ -335,5 +335,5 @@ class Slack:
|
||||
conversation_id = channel.get("id")
|
||||
break
|
||||
except Exception as e:
|
||||
logger.error(f"查找Slack公共频道失败: {e}")
|
||||
logger.error(f"查找Slack公共频道失败: {str(e)}")
|
||||
return conversation_id
|
||||
|
@ -122,7 +122,7 @@ class SubtitleModule(_ModuleBase):
|
||||
shutil.rmtree(zip_path)
|
||||
zip_file.unlink()
|
||||
except Exception as err:
|
||||
logger.error(f"删除临时文件失败:{err}")
|
||||
logger.error(f"删除临时文件失败:{str(err)}")
|
||||
else:
|
||||
sub_file = settings.TEMP_PATH / file_name
|
||||
# 保存
|
||||
|
@ -50,7 +50,7 @@ class SynologyChatModule(_ModuleBase):
|
||||
return CommingMessage(channel=MessageChannel.SynologyChat,
|
||||
userid=user_id, username=user_name, text=text)
|
||||
except Exception as err:
|
||||
logger.debug(f"解析SynologyChat消息失败:{err}")
|
||||
logger.debug(f"解析SynologyChat消息失败:{str(err)}")
|
||||
return None
|
||||
|
||||
@checkMessage(MessageChannel.SynologyChat)
|
||||
|
@ -63,7 +63,7 @@ class TelegramModule(_ModuleBase):
|
||||
try:
|
||||
message: dict = json.loads(body)
|
||||
except Exception as err:
|
||||
logger.debug(f"解析Telegram消息失败:{err}")
|
||||
logger.debug(f"解析Telegram消息失败:{str(err)}")
|
||||
return None
|
||||
if message:
|
||||
text = message.get("text")
|
||||
|
@ -54,7 +54,7 @@ class Telegram(metaclass=Singleton):
|
||||
try:
|
||||
_bot.infinity_polling(long_polling_timeout=30, logger_level=None)
|
||||
except Exception as err:
|
||||
logger.error(f"Telegram消息接收服务异常:{err}")
|
||||
logger.error(f"Telegram消息接收服务异常:{str(err)}")
|
||||
|
||||
# 启动线程来运行 infinity_polling
|
||||
self._polling_thread = threading.Thread(target=run_polling)
|
||||
|
@ -32,7 +32,7 @@ class CategoryHelper(metaclass=Singleton):
|
||||
logger.warn(f"二级分类策略配置文件格式出现严重错误!请检查:{str(e)}")
|
||||
self._categorys = {}
|
||||
except Exception as err:
|
||||
logger.warn(f"二级分类策略配置文件加载出错:{err}")
|
||||
logger.warn(f"二级分类策略配置文件加载出错:{str(err)}")
|
||||
|
||||
if self._categorys:
|
||||
self._movie_categorys = self._categorys.get('movie')
|
||||
|
@ -125,7 +125,7 @@ class TmdbScraper:
|
||||
f"https://{settings.TMDB_IMAGE_DOMAIN}/t/p/original{episode_image}",
|
||||
file_path.with_suffix(Path(episode_image).suffix))
|
||||
except Exception as e:
|
||||
logger.error(f"{file_path} 刮削失败:{e}")
|
||||
logger.error(f"{file_path} 刮削失败:{str(e)}")
|
||||
|
||||
@staticmethod
|
||||
def __gen_common_nfo(mediainfo: MediaInfo, doc, root):
|
||||
@ -355,7 +355,7 @@ class TmdbScraper:
|
||||
except RequestException as err:
|
||||
raise err
|
||||
except Exception as err:
|
||||
logger.error(f"{file_path.stem}图片下载失败:{err}")
|
||||
logger.error(f"{file_path.stem}图片下载失败:{str(err)}")
|
||||
|
||||
def __save_nfo(self, doc, file_path: Path):
|
||||
"""
|
||||
|
@ -210,10 +210,10 @@ class TmdbHelper:
|
||||
else:
|
||||
movies = self.search.movies(term=name)
|
||||
except TMDbException as err:
|
||||
logger.error(f"连接TMDB出错:{err}")
|
||||
logger.error(f"连接TMDB出错:{str(err)}")
|
||||
return None
|
||||
except Exception as e:
|
||||
logger.error(f"连接TMDB出错:{e}")
|
||||
logger.error(f"连接TMDB出错:{str(e)}")
|
||||
print(traceback.print_exc())
|
||||
return None
|
||||
logger.debug(f"API返回:{str(self.search.total_results)}")
|
||||
@ -258,10 +258,10 @@ class TmdbHelper:
|
||||
else:
|
||||
tvs = self.search.tv_shows(term=name)
|
||||
except TMDbException as err:
|
||||
logger.error(f"连接TMDB出错:{err}")
|
||||
logger.error(f"连接TMDB出错:{str(err)}")
|
||||
return None
|
||||
except Exception as e:
|
||||
logger.error(f"连接TMDB出错:{e}")
|
||||
logger.error(f"连接TMDB出错:{str(e)}")
|
||||
print(traceback.print_exc())
|
||||
return None
|
||||
logger.debug(f"API返回:{str(self.search.total_results)}")
|
||||
@ -320,10 +320,10 @@ class TmdbHelper:
|
||||
try:
|
||||
tvs = self.search.tv_shows(term=name)
|
||||
except TMDbException as err:
|
||||
logger.error(f"连接TMDB出错:{err}")
|
||||
logger.error(f"连接TMDB出错:{str(err)}")
|
||||
return None
|
||||
except Exception as e:
|
||||
logger.error(f"连接TMDB出错:{e}")
|
||||
logger.error(f"连接TMDB出错:{str(e)}")
|
||||
print(traceback.print_exc())
|
||||
return None
|
||||
|
||||
@ -400,10 +400,10 @@ class TmdbHelper:
|
||||
try:
|
||||
multis = self.search.multi(term=name) or []
|
||||
except TMDbException as err:
|
||||
logger.error(f"连接TMDB出错:{err}")
|
||||
logger.error(f"连接TMDB出错:{str(err)}")
|
||||
return None
|
||||
except Exception as e:
|
||||
logger.error(f"连接TMDB出错:{e}")
|
||||
logger.error(f"连接TMDB出错:{str(e)}")
|
||||
print(traceback.print_exc())
|
||||
return None
|
||||
logger.debug(f"API返回:{str(self.search.total_results)}")
|
||||
@ -508,7 +508,7 @@ class TmdbHelper:
|
||||
else:
|
||||
logger.info("%s TMDB网站未查询到媒体信息!" % name)
|
||||
except Exception as err:
|
||||
logger.error(f"从TheDbMovie网站查询出错:{err}")
|
||||
logger.error(f"从TheDbMovie网站查询出错:{str(err)}")
|
||||
return None
|
||||
return None
|
||||
|
||||
|
@ -33,4 +33,4 @@ class TheTvDbModule(_ModuleBase):
|
||||
logger.info(f"开始获取TVDB信息: {tvdbid} ...")
|
||||
return self.tvdb[tvdbid].data
|
||||
except Exception as err:
|
||||
logger.error(f"获取TVDB信息失败: {err}")
|
||||
logger.error(f"获取TVDB信息失败: {str(err)}")
|
||||
|
@ -45,7 +45,7 @@ class Transmission(metaclass=Singleton):
|
||||
timeout=60)
|
||||
return trt
|
||||
except Exception as err:
|
||||
logger.error(f"transmission 连接出错:{err}")
|
||||
logger.error(f"transmission 连接出错:{str(err)}")
|
||||
return None
|
||||
|
||||
def is_inactive(self) -> bool:
|
||||
@ -73,7 +73,7 @@ class Transmission(metaclass=Singleton):
|
||||
try:
|
||||
torrents = self.trc.get_torrents(ids=ids, arguments=self._trarg)
|
||||
except Exception as err:
|
||||
logger.error(f"获取种子列表出错:{err}")
|
||||
logger.error(f"获取种子列表出错:{str(err)}")
|
||||
return [], True
|
||||
if status and not isinstance(status, list):
|
||||
status = [status]
|
||||
@ -104,7 +104,7 @@ class Transmission(metaclass=Singleton):
|
||||
torrents, error = self.get_torrents(status=["seeding", "seed_pending"], ids=ids, tags=tags)
|
||||
return None if error else torrents or []
|
||||
except Exception as err:
|
||||
logger.error(f"获取已完成的种子列表出错:{err}")
|
||||
logger.error(f"获取已完成的种子列表出错:{str(err)}")
|
||||
return None
|
||||
|
||||
def get_downloading_torrents(self, ids: Union[str, list] = None,
|
||||
@ -121,7 +121,7 @@ class Transmission(metaclass=Singleton):
|
||||
tags=tags)
|
||||
return None if error else torrents or []
|
||||
except Exception as err:
|
||||
logger.error(f"获取正在下载的种子列表出错:{err}")
|
||||
logger.error(f"获取正在下载的种子列表出错:{str(err)}")
|
||||
return None
|
||||
|
||||
def set_torrent_tag(self, ids: str, tags: list) -> bool:
|
||||
@ -136,7 +136,7 @@ class Transmission(metaclass=Singleton):
|
||||
self.trc.change_torrent(labels=tags, ids=ids)
|
||||
return True
|
||||
except Exception as err:
|
||||
logger.error(f"设置种子标签出错:{err}")
|
||||
logger.error(f"设置种子标签出错:{str(err)}")
|
||||
return False
|
||||
|
||||
def add_torrent(self, content: Union[str, bytes],
|
||||
@ -162,7 +162,7 @@ class Transmission(metaclass=Singleton):
|
||||
labels=labels,
|
||||
cookies=cookie)
|
||||
except Exception as err:
|
||||
logger.error(f"添加种子出错:{err}")
|
||||
logger.error(f"添加种子出错:{str(err)}")
|
||||
return None
|
||||
|
||||
def start_torrents(self, ids: Union[str, list]) -> bool:
|
||||
@ -175,7 +175,7 @@ class Transmission(metaclass=Singleton):
|
||||
self.trc.start_torrent(ids=ids)
|
||||
return True
|
||||
except Exception as err:
|
||||
logger.error(f"启动种子出错:{err}")
|
||||
logger.error(f"启动种子出错:{str(err)}")
|
||||
return False
|
||||
|
||||
def stop_torrents(self, ids: Union[str, list]) -> bool:
|
||||
@ -188,7 +188,7 @@ class Transmission(metaclass=Singleton):
|
||||
self.trc.stop_torrent(ids=ids)
|
||||
return True
|
||||
except Exception as err:
|
||||
logger.error(f"停止种子出错:{err}")
|
||||
logger.error(f"停止种子出错:{str(err)}")
|
||||
return False
|
||||
|
||||
def delete_torrents(self, delete_file: bool, ids: Union[str, list]) -> bool:
|
||||
@ -203,7 +203,7 @@ class Transmission(metaclass=Singleton):
|
||||
self.trc.remove_torrent(delete_data=delete_file, ids=ids)
|
||||
return True
|
||||
except Exception as err:
|
||||
logger.error(f"删除种子出错:{err}")
|
||||
logger.error(f"删除种子出错:{str(err)}")
|
||||
return False
|
||||
|
||||
def get_files(self, tid: str) -> Optional[List[File]]:
|
||||
@ -217,7 +217,7 @@ class Transmission(metaclass=Singleton):
|
||||
try:
|
||||
torrent = self.trc.get_torrent(tid)
|
||||
except Exception as err:
|
||||
logger.error(f"获取种子文件列表出错:{err}")
|
||||
logger.error(f"获取种子文件列表出错:{str(err)}")
|
||||
return None
|
||||
if torrent:
|
||||
return torrent.files()
|
||||
@ -234,7 +234,7 @@ class Transmission(metaclass=Singleton):
|
||||
self.trc.change_torrent(ids=tid, files_wanted=file_ids)
|
||||
return True
|
||||
except Exception as err:
|
||||
logger.error(f"设置下载文件状态出错:{err}")
|
||||
logger.error(f"设置下载文件状态出错:{str(err)}")
|
||||
return False
|
||||
|
||||
def transfer_info(self) -> Optional[SessionStats]:
|
||||
@ -246,7 +246,7 @@ class Transmission(metaclass=Singleton):
|
||||
try:
|
||||
return self.trc.session_stats()
|
||||
except Exception as err:
|
||||
logger.error(f"获取传输信息出错:{err}")
|
||||
logger.error(f"获取传输信息出错:{str(err)}")
|
||||
return None
|
||||
|
||||
def set_speed_limit(self, download_limit: float = None, upload_limit: float = None) -> bool:
|
||||
@ -268,7 +268,7 @@ class Transmission(metaclass=Singleton):
|
||||
)
|
||||
return True
|
||||
except Exception as err:
|
||||
logger.error(f"设置速度限制出错:{err}")
|
||||
logger.error(f"设置速度限制出错:{str(err)}")
|
||||
return False
|
||||
|
||||
def recheck_torrents(self, ids: Union[str, list]):
|
||||
@ -280,7 +280,7 @@ class Transmission(metaclass=Singleton):
|
||||
try:
|
||||
return self.trc.verify_torrent(ids=ids)
|
||||
except Exception as err:
|
||||
logger.error(f"重新校验种子出错:{err}")
|
||||
logger.error(f"重新校验种子出错:{str(err)}")
|
||||
return False
|
||||
|
||||
def add_trackers(self, ids: Union[str, list], trackers: list):
|
||||
@ -292,7 +292,7 @@ class Transmission(metaclass=Singleton):
|
||||
try:
|
||||
return self.trc.change_torrent(ids=ids, tracker_list=[trackers])
|
||||
except Exception as err:
|
||||
logger.error(f"添加Tracker出错:{err}")
|
||||
logger.error(f"添加Tracker出错:{str(err)}")
|
||||
return False
|
||||
|
||||
def change_torrent(self,
|
||||
@ -347,5 +347,5 @@ class Transmission(metaclass=Singleton):
|
||||
seedIdleMode=seedIdleMode,
|
||||
seedIdleLimit=seedIdleLimit)
|
||||
except Exception as err:
|
||||
logger.error(f"设置种子出错:{err}")
|
||||
logger.error(f"设置种子出错:{str(err)}")
|
||||
return False
|
||||
|
@ -117,7 +117,7 @@ class WechatModule(_ModuleBase):
|
||||
return CommingMessage(channel=MessageChannel.Wechat,
|
||||
userid=user_id, username=user_id, text=content)
|
||||
except Exception as err:
|
||||
logger.error(f"微信消息处理发生错误:{err}")
|
||||
logger.error(f"微信消息处理发生错误:{str(err)}")
|
||||
return None
|
||||
|
||||
@checkMessage(MessageChannel.Wechat)
|
||||
|
@ -76,7 +76,7 @@ class WeChat(metaclass=Singleton):
|
||||
else:
|
||||
logger.error(f"获取微信access_token失败,未获取到返回信息")
|
||||
except Exception as e:
|
||||
logger.error(f"获取微信access_token失败,错误信息:{e}")
|
||||
logger.error(f"获取微信access_token失败,错误信息:{str(e)}")
|
||||
return None
|
||||
return self._access_token
|
||||
|
||||
@ -271,7 +271,7 @@ class WeChat(metaclass=Singleton):
|
||||
logger.error(f"发送请求失败,未获取到返回信息")
|
||||
return False
|
||||
except Exception as err:
|
||||
logger.error(f"发送请求失败,错误信息:{err}")
|
||||
logger.error(f"发送请求失败,错误信息:{str(err)}")
|
||||
return False
|
||||
|
||||
def create_menus(self, commands: Dict[str, dict]):
|
||||
|
@ -71,7 +71,7 @@ class AutoBackup(_PluginBase):
|
||||
trigger=CronTrigger.from_crontab(self._cron),
|
||||
name="自动备份")
|
||||
except Exception as err:
|
||||
logger.error(f"定时任务配置错误:{err}")
|
||||
logger.error(f"定时任务配置错误:{str(err)}")
|
||||
|
||||
if self._onlyonce:
|
||||
logger.info(f"自动备份服务启动,立即运行一次")
|
||||
|
@ -83,7 +83,7 @@ class AutoClean(_PluginBase):
|
||||
trigger=CronTrigger.from_crontab(self._cron),
|
||||
name="定时清理媒体库")
|
||||
except Exception as err:
|
||||
logger.error(f"定时任务配置错误:{err}")
|
||||
logger.error(f"定时任务配置错误:{str(err)}")
|
||||
|
||||
if self._onlyonce:
|
||||
logger.info(f"定时清理媒体库服务启动,立即运行一次")
|
||||
|
@ -168,9 +168,9 @@ class AutoSignIn(_PluginBase):
|
||||
logger.info(
|
||||
f"站点自动签到服务启动,执行周期 {self._start_time}点-{self._end_time}点 每{self._cron}小时执行一次")
|
||||
except Exception as err:
|
||||
logger.error(f"定时任务配置错误:{err}")
|
||||
logger.error(f"定时任务配置错误:{str(err)}")
|
||||
# 推送实时消息
|
||||
self.systemmessage.put(f"执行周期配置错误:{err}")
|
||||
self.systemmessage.put(f"执行周期配置错误:{str(err)}")
|
||||
self._cron = ""
|
||||
self._enabled = False
|
||||
self.__update_config()
|
||||
|
@ -70,7 +70,7 @@ class _ISiteSigninHandler(metaclass=ABCMeta):
|
||||
# 解码为字符串
|
||||
return raw_data.decode(encoding)
|
||||
except Exception as e:
|
||||
logger.error(f"chardet解码失败:{e}")
|
||||
logger.error(f"chardet解码失败:{str(e)}")
|
||||
return res.text
|
||||
else:
|
||||
return res.text
|
||||
|
@ -48,7 +48,7 @@ class PTerClub(_ISiteSigninHandler):
|
||||
try:
|
||||
sign_dict = json.loads(html_text)
|
||||
except Exception as e:
|
||||
logger.error(f"{site} 签到失败,签到接口返回数据异常,错误信息:{e}")
|
||||
logger.error(f"{site} 签到失败,签到接口返回数据异常,错误信息:{str(e)}")
|
||||
return False, '签到失败,签到接口返回数据异常'
|
||||
if sign_dict['status'] == '1':
|
||||
# {"status":"1","data":" (签到已成功300)","message":"<p>这是您的第<b>237</b>次签到,
|
||||
|
@ -141,7 +141,7 @@ class Tjupt(_ISiteSigninHandler):
|
||||
proxy=proxy,
|
||||
site=site)
|
||||
except (FileNotFoundError, IOError, OSError) as e:
|
||||
logger.debug(f"查询本地已知答案失败:{e},继续请求豆瓣查询")
|
||||
logger.debug(f"查询本地已知答案失败:{str(e)},继续请求豆瓣查询")
|
||||
|
||||
# 本地不存在正确答案则请求豆瓣查询匹配
|
||||
for value, answer in answers:
|
||||
@ -236,7 +236,7 @@ class Tjupt(_ISiteSigninHandler):
|
||||
with open(self._answer_file, 'w') as f:
|
||||
f.write(formatted_data)
|
||||
except (FileNotFoundError, IOError, OSError) as e:
|
||||
logger.debug(f"签到成功写入本地文件失败:{e}")
|
||||
logger.debug(f"签到成功写入本地文件失败:{str(e)}")
|
||||
|
||||
@staticmethod
|
||||
def _tohash(img, shape=(10, 10)):
|
||||
|
@ -84,9 +84,9 @@ class BestFilmVersion(_PluginBase):
|
||||
trigger=CronTrigger.from_crontab(self._cron),
|
||||
name="收藏洗版")
|
||||
except Exception as err:
|
||||
logger.error(f"定时任务配置错误:{err}")
|
||||
logger.error(f"定时任务配置错误:{str(err)}")
|
||||
# 推送实时消息
|
||||
self.systemmessage.put(f"执行周期配置错误:{err}")
|
||||
self.systemmessage.put(f"执行周期配置错误:{str(err)}")
|
||||
else:
|
||||
self._scheduler.add_job(self.sync, "interval", minutes=30, name="收藏洗版")
|
||||
|
||||
|
@ -236,8 +236,8 @@ class BrushFlow(_PluginBase):
|
||||
try:
|
||||
self._scheduler.add_job(self.brush, 'interval', minutes=self._cron)
|
||||
except Exception as e:
|
||||
logger.error(f"站点刷流服务启动失败:{e}")
|
||||
self.systemmessage.put(f"站点刷流服务启动失败:{e}")
|
||||
logger.error(f"站点刷流服务启动失败:{str(e)}")
|
||||
self.systemmessage.put(f"站点刷流服务启动失败:{str(e)}")
|
||||
return
|
||||
if self._onlyonce:
|
||||
logger.info(f"站点刷流服务启动,立即运行一次")
|
||||
|
@ -92,9 +92,9 @@ class DoubanSync(_PluginBase):
|
||||
trigger=CronTrigger.from_crontab(self._cron),
|
||||
name="豆瓣想看")
|
||||
except Exception as err:
|
||||
logger.error(f"定时任务配置错误:{err}")
|
||||
logger.error(f"定时任务配置错误:{str(err)}")
|
||||
# 推送实时消息
|
||||
self.systemmessage.put(f"执行周期配置错误:{err}")
|
||||
self.systemmessage.put(f"执行周期配置错误:{str(err)}")
|
||||
else:
|
||||
self._scheduler.add_job(self.sync, "interval", minutes=30, name="豆瓣想看")
|
||||
|
||||
@ -541,7 +541,7 @@ class DoubanSync(_PluginBase):
|
||||
"time": datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
})
|
||||
except Exception as err:
|
||||
logger.error(f'同步用户 {user_id} 豆瓣想看数据出错:{err}')
|
||||
logger.error(f'同步用户 {user_id} 豆瓣想看数据出错:{str(err)}')
|
||||
logger.info(f"用户 {user_id} 豆瓣想看同步完成")
|
||||
# 保存历史记录
|
||||
self.save_data('history', history)
|
||||
|
@ -68,7 +68,7 @@ class DownloadingMsg(_PluginBase):
|
||||
seconds=int(self._seconds),
|
||||
name="下载进度推送")
|
||||
except Exception as err:
|
||||
logger.error(f"定时任务配置错误:{err}")
|
||||
logger.error(f"定时任务配置错误:{str(err)}")
|
||||
|
||||
# 启动任务
|
||||
if self._scheduler.get_jobs():
|
||||
|
@ -69,7 +69,7 @@ class InvitesSignin(_PluginBase):
|
||||
trigger=CronTrigger.from_crontab(self._cron),
|
||||
name="药丸签到")
|
||||
except Exception as err:
|
||||
logger.error(f"定时任务配置错误:{err}")
|
||||
logger.error(f"定时任务配置错误:{str(err)}")
|
||||
|
||||
if self._onlyonce:
|
||||
logger.info(f"药丸签到服务启动,立即运行一次")
|
||||
|
@ -79,8 +79,8 @@ class LibraryScraper(_PluginBase):
|
||||
trigger=CronTrigger.from_crontab(self._cron),
|
||||
name="媒体库刮削")
|
||||
except Exception as e:
|
||||
logger.error(f"媒体库刮削服务启动失败,原因:{e}")
|
||||
self.systemmessage.put(f"媒体库刮削服务启动失败,原因:{e}")
|
||||
logger.error(f"媒体库刮削服务启动失败,原因:{str(e)}")
|
||||
self.systemmessage.put(f"媒体库刮削服务启动失败,原因:{str(e)}")
|
||||
else:
|
||||
logger.info(f"媒体库刮削服务启动,周期:每7天")
|
||||
self._scheduler.add_job(func=self.__libraryscraper,
|
||||
|
@ -90,9 +90,9 @@ class MediaSyncDel(_PluginBase):
|
||||
trigger=CronTrigger.from_crontab(self._cron),
|
||||
name="媒体库同步删除")
|
||||
except Exception as err:
|
||||
logger.error(f"定时任务配置错误:{err}")
|
||||
logger.error(f"定时任务配置错误:{str(err)}")
|
||||
# 推送实时消息
|
||||
self.systemmessage.put(f"执行周期配置错误:{err}")
|
||||
self.systemmessage.put(f"执行周期配置错误:{str(err)}")
|
||||
else:
|
||||
self._scheduler.add_job(self.sync_del_by_log, "interval", minutes=30, name="媒体库同步删除")
|
||||
|
||||
@ -996,7 +996,7 @@ class MediaSyncDel(_PluginBase):
|
||||
|
||||
return delete_flag, True, handle_cnt
|
||||
except Exception as e:
|
||||
logger.error(f"删种失败: {e}")
|
||||
logger.error(f"删种失败: {str(e)}")
|
||||
return False, False, 0
|
||||
|
||||
def __del_seed(self, download, download_id, action_flag, handle_cnt):
|
||||
|
@ -351,7 +351,7 @@ class MessageForward(_PluginBase):
|
||||
logger.error(f"转发消息 {title} 失败,未获取到返回信息")
|
||||
return False
|
||||
except Exception as err:
|
||||
logger.error(f"转发消息 {title} 异常,错误信息:{err}")
|
||||
logger.error(f"转发消息 {title} 异常,错误信息:{str(err)}")
|
||||
return False
|
||||
|
||||
def __get_access_token(self, corpid: str, appsecret: str):
|
||||
@ -377,7 +377,7 @@ class MessageForward(_PluginBase):
|
||||
logger.error(f"{corpid} {appsecret} 获取token失败")
|
||||
return None, None, None
|
||||
except Exception as e:
|
||||
logger.error(f"获取微信access_token失败,错误信息:{e}")
|
||||
logger.error(f"获取微信access_token失败,错误信息:{str(e)}")
|
||||
return None, None, None
|
||||
|
||||
def stop_service(self):
|
||||
|
@ -63,7 +63,7 @@ class MoviePilotUpdateNotify(_PluginBase):
|
||||
trigger=CronTrigger.from_crontab(self._cron),
|
||||
name="检查MoviePilot更新")
|
||||
except Exception as err:
|
||||
logger.error(f"定时任务配置错误:{err}")
|
||||
logger.error(f"定时任务配置错误:{str(err)}")
|
||||
|
||||
# 启动任务
|
||||
if self._scheduler.get_jobs():
|
||||
|
@ -73,7 +73,7 @@ class NAStoolSync(_PluginBase):
|
||||
"site": self._site,
|
||||
}
|
||||
)
|
||||
logger.error(f"无法打开数据库文件 {self._nt_db_path},请检查路径是否正确:{e}")
|
||||
logger.error(f"无法打开数据库文件 {self._nt_db_path},请检查路径是否正确:{str(e)}")
|
||||
return
|
||||
|
||||
# 创建游标cursor来执行executeSQL语句
|
||||
|
@ -610,7 +610,7 @@ class PersonMeta(_PluginBase):
|
||||
else:
|
||||
logger.debug(f"人物 {people.get('Name')} 未找到中文数据")
|
||||
except Exception as err:
|
||||
logger.error(f"更新人物信息失败:{err}")
|
||||
logger.error(f"更新人物信息失败:{str(err)}")
|
||||
return None
|
||||
|
||||
def __get_douban_actors(self, mediainfo: MediaInfo, season: int = None) -> List[dict]:
|
||||
@ -652,7 +652,7 @@ class PersonMeta(_PluginBase):
|
||||
if res:
|
||||
return res.json()
|
||||
except Exception as err:
|
||||
logger.error(f"获取Emby媒体项详情失败:{err}")
|
||||
logger.error(f"获取Emby媒体项详情失败:{str(err)}")
|
||||
return {}
|
||||
|
||||
def __get_jellyfin_iteminfo() -> dict:
|
||||
@ -668,7 +668,7 @@ class PersonMeta(_PluginBase):
|
||||
result['FileName'] = Path(result['Path']).name
|
||||
return result
|
||||
except Exception as err:
|
||||
logger.error(f"获取Jellyfin媒体项详情失败:{err}")
|
||||
logger.error(f"获取Jellyfin媒体项详情失败:{str(err)}")
|
||||
return {}
|
||||
|
||||
def __get_plex_iteminfo() -> dict:
|
||||
@ -702,7 +702,7 @@ class PersonMeta(_PluginBase):
|
||||
iteminfo['CommunityRating'] = plexitem.audienceRating
|
||||
return iteminfo
|
||||
except Exception as err:
|
||||
logger.error(f"获取Plex媒体项详情失败:{err}")
|
||||
logger.error(f"获取Plex媒体项详情失败:{str(err)}")
|
||||
return {}
|
||||
|
||||
if server == "emby":
|
||||
@ -732,7 +732,7 @@ class PersonMeta(_PluginBase):
|
||||
if res:
|
||||
return res.json()
|
||||
except Exception as err:
|
||||
logger.error(f"获取Emby媒体的所有子媒体项失败:{err}")
|
||||
logger.error(f"获取Emby媒体的所有子媒体项失败:{str(err)}")
|
||||
return {}
|
||||
|
||||
def __get_jellyfin_items() -> dict:
|
||||
@ -748,7 +748,7 @@ class PersonMeta(_PluginBase):
|
||||
if res:
|
||||
return res.json()
|
||||
except Exception as err:
|
||||
logger.error(f"获取Jellyfin媒体的所有子媒体项失败:{err}")
|
||||
logger.error(f"获取Jellyfin媒体的所有子媒体项失败:{str(err)}")
|
||||
return {}
|
||||
|
||||
def __get_plex_items() -> dict:
|
||||
@ -814,7 +814,7 @@ class PersonMeta(_PluginBase):
|
||||
items['Items'].append(item)
|
||||
return items
|
||||
except Exception as err:
|
||||
logger.error(f"获取Plex媒体的所有子媒体项失败:{err}")
|
||||
logger.error(f"获取Plex媒体的所有子媒体项失败:{str(err)}")
|
||||
return {}
|
||||
|
||||
if server == "emby":
|
||||
@ -848,7 +848,7 @@ class PersonMeta(_PluginBase):
|
||||
logger.error(f"更新Emby媒体项详情失败,错误码:{res.status_code}")
|
||||
return False
|
||||
except Exception as err:
|
||||
logger.error(f"更新Emby媒体项详情失败:{err}")
|
||||
logger.error(f"更新Emby媒体项详情失败:{str(err)}")
|
||||
return False
|
||||
|
||||
def __set_jellyfin_iteminfo():
|
||||
@ -869,7 +869,7 @@ class PersonMeta(_PluginBase):
|
||||
logger.error(f"更新Jellyfin媒体项详情失败,错误码:{res.status_code}")
|
||||
return False
|
||||
except Exception as err:
|
||||
logger.error(f"更新Jellyfin媒体项详情失败:{err}")
|
||||
logger.error(f"更新Jellyfin媒体项详情失败:{str(err)}")
|
||||
return False
|
||||
|
||||
def __set_plex_iteminfo():
|
||||
@ -887,7 +887,7 @@ class PersonMeta(_PluginBase):
|
||||
plexitem.editTitle(iteminfo['Name']).editSummary(iteminfo['Overview']).reload()
|
||||
return True
|
||||
except Exception as err:
|
||||
logger.error(f"更新Plex媒体项详情失败:{err}")
|
||||
logger.error(f"更新Plex媒体项详情失败:{str(err)}")
|
||||
return False
|
||||
|
||||
if server == "emby":
|
||||
@ -920,7 +920,7 @@ class PersonMeta(_PluginBase):
|
||||
else:
|
||||
logger.warn(f"{imageurl} 图片下载失败,请检查网络连通性")
|
||||
except Exception as err:
|
||||
logger.error(f"下载图片失败:{err}")
|
||||
logger.error(f"下载图片失败:{str(err)}")
|
||||
return None
|
||||
|
||||
def __set_emby_item_image(_base64: str):
|
||||
|
@ -100,9 +100,9 @@ class RssSubscribe(_PluginBase):
|
||||
trigger=CronTrigger.from_crontab(self._cron),
|
||||
name="RSS订阅")
|
||||
except Exception as err:
|
||||
logger.error(f"定时任务配置错误:{err}")
|
||||
logger.error(f"定时任务配置错误:{str(err)}")
|
||||
# 推送实时消息
|
||||
self.systemmessage.put(f"执行周期配置错误:{err}")
|
||||
self.systemmessage.put(f"执行周期配置错误:{str(err)}")
|
||||
else:
|
||||
self._scheduler.add_job(self.check, "interval", minutes=30, name="RSS订阅")
|
||||
|
||||
@ -658,7 +658,7 @@ class RssSubscribe(_PluginBase):
|
||||
"time": datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
})
|
||||
except Exception as err:
|
||||
logger.error(f'刷新RSS数据出错:{err}')
|
||||
logger.error(f'刷新RSS数据出错:{str(err)}')
|
||||
logger.info(f"RSS {url} 刷新完成")
|
||||
# 保存历史记录
|
||||
self.save_data('history', history)
|
||||
|
@ -128,9 +128,9 @@ class SiteStatistic(_PluginBase):
|
||||
trigger=CronTrigger.from_crontab(self._cron),
|
||||
name="站点数据统计")
|
||||
except Exception as err:
|
||||
logger.error(f"定时任务配置错误:{err}")
|
||||
logger.error(f"定时任务配置错误:{str(err)}")
|
||||
# 推送实时消息
|
||||
self.systemmessage.put(f"执行周期配置错误:{err}")
|
||||
self.systemmessage.put(f"执行周期配置错误:{str(err)}")
|
||||
else:
|
||||
triggers = TimerUtils.random_scheduler(num_executions=1,
|
||||
begin_hour=0,
|
||||
@ -836,7 +836,7 @@ class SiteStatistic(_PluginBase):
|
||||
if site_schema.match(html_text):
|
||||
return site_schema
|
||||
except Exception as e:
|
||||
logger.error(f"站点匹配失败 {e}")
|
||||
logger.error(f"站点匹配失败 {str(e)}")
|
||||
return None
|
||||
|
||||
def build(self, site_info: CommentedMap) -> Optional[ISiteUserInfo]:
|
||||
|
@ -123,7 +123,7 @@ class NexusPhpSiteUserInfo(ISiteUserInfo):
|
||||
if bonus_match and bonus_match.group(1).strip():
|
||||
self.bonus = StringUtils.str_float(bonus_match.group(1).strip('"'))
|
||||
except Exception as err:
|
||||
logger.error(f"{self.site_name} 解析魔力值出错, 错误信息: {err}")
|
||||
logger.error(f"{self.site_name} 解析魔力值出错, 错误信息: {str(err)}")
|
||||
|
||||
@staticmethod
|
||||
def _parse_ucoin(html):
|
||||
|
@ -38,7 +38,7 @@ class NexusRabbitSiteUserInfo(NexusPhpSiteUserInfo):
|
||||
try:
|
||||
torrents = json.loads(html_text).get('data')
|
||||
except Exception as e:
|
||||
logger.error(f"解析做种信息失败: {e}")
|
||||
logger.error(f"解析做种信息失败: {str(e)}")
|
||||
return
|
||||
|
||||
page_seeding_size = 0
|
||||
|
@ -101,7 +101,7 @@ class SyncDownloadFiles(_PluginBase):
|
||||
name="自动同步下载器文件记录")
|
||||
logger.info(f"自动同步下载器文件记录服务启动,时间间隔 {self._time} 小时")
|
||||
except Exception as err:
|
||||
logger.error(f"定时任务配置错误:{err}")
|
||||
logger.error(f"定时任务配置错误:{str(err)}")
|
||||
|
||||
# 启动任务
|
||||
if self._scheduler.get_jobs():
|
||||
|
@ -109,8 +109,8 @@ class TorrentTransfer(_PluginBase):
|
||||
self._scheduler.add_job(self.transfer,
|
||||
CronTrigger.from_crontab(self._cron))
|
||||
except Exception as e:
|
||||
logger.error(f"转移做种服务启动失败:{e}")
|
||||
self.systemmessage.put(f"转移做种服务启动失败:{e}")
|
||||
logger.error(f"转移做种服务启动失败:{str(e)}")
|
||||
self.systemmessage.put(f"转移做种服务启动失败:{str(e)}")
|
||||
return
|
||||
if self._onlyonce:
|
||||
logger.info(f"转移做种服务启动,立即运行一次")
|
||||
@ -594,7 +594,7 @@ class TorrentTransfer(_PluginBase):
|
||||
torrent_main = bdecode(content)
|
||||
main_announce = torrent_main.get('announce')
|
||||
except Exception as err:
|
||||
logger.warn(f"解析种子文件 {torrent_file} 失败:{err}")
|
||||
logger.warn(f"解析种子文件 {torrent_file} 失败:{str(err)}")
|
||||
fail += 1
|
||||
continue
|
||||
|
||||
@ -623,7 +623,7 @@ class TorrentTransfer(_PluginBase):
|
||||
# 编码并保存到临时文件
|
||||
torrent_file.write_bytes(bencode(torrent_main))
|
||||
except Exception as err:
|
||||
logger.error(f"解析fastresume文件 {fastresume_file} 出错:{err}")
|
||||
logger.error(f"解析fastresume文件 {fastresume_file} 出错:{str(err)}")
|
||||
fail += 1
|
||||
continue
|
||||
|
||||
|
@ -220,7 +220,7 @@ class Scheduler(metaclass=Singleton):
|
||||
try:
|
||||
job["func"](*args, **kwargs)
|
||||
except Exception as e:
|
||||
logger.error(f"定时任务 {job_id} 执行失败:{e}")
|
||||
logger.error(f"定时任务 {job_id} 执行失败:{str(e)}")
|
||||
self._jobs[job_id]["running"] = False
|
||||
|
||||
def list(self) -> List[schemas.ScheduleInfo]:
|
||||
|
Loading…
x
Reference in New Issue
Block a user