Revert "refactor(helper): 将LLMHelper StorageHelper的相关方法改为静态方法,移除实例调用"

This reverts commit 9f381b3c73.
This commit is contained in:
jxxghp
2026-03-14 18:19:47 +08:00
parent 7bfee87cbf
commit f38cb274e4
6 changed files with 68 additions and 61 deletions

View File

@@ -317,7 +317,7 @@ async def get_llm_models(provider: str, api_key: str, base_url: Optional[str] =
获取LLM模型列表
"""
try:
models = LLMHelper.get_models(provider, api_key, base_url)
models = LLMHelper().get_models(provider, api_key, base_url)
return schemas.Response(success=True, data=models)
except Exception as e:
return schemas.Response(success=False, message=str(e))

View File

@@ -71,14 +71,13 @@ class LLMHelper:
openai_proxy=settings.PROXY_HOST
)
@staticmethod
def get_models(provider: str, api_key: str, base_url: str = None) -> List[str]:
def get_models(self, provider: str, api_key: str, base_url: str = None) -> List[str]:
"""获取模型列表"""
logger.info(f"获取 {provider} 模型列表...")
if provider == "google":
return LLMHelper._get_google_models(api_key)
return self._get_google_models(api_key)
else:
return LLMHelper._get_openai_compatible_models(provider, api_key, base_url)
return self._get_openai_compatible_models(provider, api_key, base_url)
@staticmethod
def _get_google_models(api_key: str) -> List[str]:

View File

@@ -20,23 +20,21 @@ class StorageHelper:
return []
return [schemas.StorageConf(**s) for s in storage_confs]
@staticmethod
def get_storage(storage: str) -> Optional[schemas.StorageConf]:
def get_storage(self, storage: str) -> Optional[schemas.StorageConf]:
"""
获取指定存储配置
"""
storagies = StorageHelper.get_storagies()
storagies = self.get_storagies()
for s in storagies:
if s.type == storage:
return s
return None
@staticmethod
def set_storage(storage: str, conf: dict):
def set_storage(self, storage: str, conf: dict):
"""
设置存储配置
"""
storagies = StorageHelper.get_storagies()
storagies = self.get_storagies()
if not storagies:
storagies = [
schemas.StorageConf(
@@ -51,12 +49,11 @@ class StorageHelper:
break
SystemConfigOper().set(SystemConfigKey.Storages, [s.model_dump() for s in storagies])
@staticmethod
def add_storage(storage: str, name: str, conf: dict):
def add_storage(self, storage: str, name: str, conf: dict):
"""
添加存储配置
"""
storagies = StorageHelper.get_storagies()
storagies = self.get_storagies()
if not storagies:
storagies = [
schemas.StorageConf(
@@ -73,12 +70,11 @@ class StorageHelper:
))
SystemConfigOper().set(SystemConfigKey.Storages, [s.model_dump() for s in storagies])
@staticmethod
def reset_storage(storage: str):
def reset_storage(self, storage: str):
"""
重置存储配置
"""
storagies = StorageHelper.get_storagies()
storagies = self.get_storagies()
for s in storagies:
if s.type == storage:
s.config = {}

View File

@@ -7,6 +7,7 @@ from app.core.context import MediaInfo
from app.core.meta import MetaBase
from app.core.metainfo import MetaInfo
from app.helper.directory import DirectoryHelper
from app.helper.message import MessageHelper
from app.helper.module import ModuleHelper
from app.log import logger
from app.modules import _ModuleBase
@@ -25,6 +26,11 @@ class FileManagerModule(_ModuleBase):
_storage_schemas = []
_support_storages = []
def __init__(self):
super().__init__()
self.directoryhelper = DirectoryHelper()
self.messagehelper = MessageHelper()
def init_module(self) -> None:
# 加载模块
self._storage_schemas = ModuleHelper.load('app.modules.filemanager.storages',
@@ -65,7 +71,7 @@ class FileManagerModule(_ModuleBase):
测试模块连接性
"""
# 检查目录
dirs = DirectoryHelper.get_dirs()
dirs = self.directoryhelper.get_dirs()
if not dirs:
return False, "未设置任何目录"
for d in dirs:
@@ -132,6 +138,7 @@ class FileManagerModule(_ModuleBase):
:param mediainfo: 媒体信息
:return: 重命名后的名称(含目录)
"""
handler = TransHandler()
# 重命名格式
rename_format = settings.RENAME_FORMAT(mediainfo.type)
# 获取集信息
@@ -151,9 +158,9 @@ class FileManagerModule(_ModuleBase):
episode_group=mediainfo.episode_group,
)
# 获取重命名后的名称
path = TransHandler.get_rename_path(
path = handler.get_rename_path(
template_string=rename_format,
rename_dict=TransHandler.get_naming_dict(meta=meta,
rename_dict=handler.get_naming_dict(meta=meta,
mediainfo=mediainfo,
episodes_info=episodes_info,
file_ext=Path(meta.title).suffix)
@@ -417,6 +424,7 @@ class FileManagerModule(_ModuleBase):
:param target_oper: 目标存储操作对象
:return: {path, target_path, message}
"""
handler = TransHandler()
# 检查目录路径
if fileitem.storage == "local" and not Path(fileitem.path).exists():
return TransferInfo(success=False,
@@ -451,7 +459,7 @@ class FileManagerModule(_ModuleBase):
# 是否需要刮削
need_scrape = target_directory.scraping if scrape is None else scrape
# 拼装媒体库一、二级子目录
target_path = TransHandler.get_dest_dir(mediainfo=mediainfo, target_dir=target_directory,
target_path = handler.get_dest_dir(mediainfo=mediainfo, target_dir=target_directory,
need_type_folder=library_type_folder,
need_category_folder=library_category_folder)
elif target_path:
@@ -460,7 +468,7 @@ class FileManagerModule(_ModuleBase):
need_notify = False
overwrite_mode = "never"
# 手动整理的场景,有自定义目标路径
target_path = TransHandler.get_dest_path(mediainfo=mediainfo, target_path=target_path,
target_path = handler.get_dest_path(mediainfo=mediainfo, target_path=target_path,
need_type_folder=library_type_folder,
need_category_folder=library_category_folder)
else:
@@ -503,7 +511,7 @@ class FileManagerModule(_ModuleBase):
# 整理
logger.info(f"获取整理目标路径:【{target_storage}{target_path}")
return TransHandler.transfer_media(fileitem=fileitem,
return handler.transfer_media(fileitem=fileitem,
in_meta=meta,
mediainfo=mediainfo,
target_storage=target_storage,
@@ -522,6 +530,7 @@ class FileManagerModule(_ModuleBase):
获取对应媒体的媒体库文件列表
:param mediainfo: 媒体信息
"""
handler = TransHandler()
ret_fileitems = []
# 检查本地媒体库
dest_dirs = DirectoryHelper.get_library_dirs()
@@ -532,7 +541,7 @@ class FileManagerModule(_ModuleBase):
if not storage_oper:
continue
# 媒体分类路径
dir_path = TransHandler.get_dest_dir(mediainfo=mediainfo, target_dir=dest_dir)
dir_path = handler.get_dest_dir(mediainfo=mediainfo, target_dir=dest_dir)
# 重命名格式
rename_format = settings.RENAME_FORMAT(mediainfo.type)
# 元数据补上常用属性,尽可能确保重命名后的路径不出现空白
@@ -546,10 +555,10 @@ class FileManagerModule(_ModuleBase):
if meta.begin_episode is None:
meta.begin_episode = 1
# 获取路径(重命名路径)
target_path = TransHandler.get_rename_path(
target_path = handler.get_rename_path(
path=dir_path,
template_string=rename_format,
rename_dict=TransHandler.get_naming_dict(meta=meta,
rename_dict=handler.get_naming_dict(meta=meta,
mediainfo=mediainfo)
)
# 获取重命名后的媒体文件根路径

View File

@@ -44,6 +44,9 @@ class StorageBase(metaclass=ABCMeta):
transtype = {}
snapshot_check_folder_modtime = True
def __init__(self):
self.storagehelper = StorageHelper()
@abstractmethod
def init_storage(self):
"""
@@ -67,7 +70,7 @@ class StorageBase(metaclass=ABCMeta):
"""
获取配置
"""
return StorageHelper.get_storage(self.schema.value)
return self.storagehelper.get_storage(self.schema.value)
def get_conf(self) -> dict:
"""
@@ -80,7 +83,7 @@ class StorageBase(metaclass=ABCMeta):
"""
设置配置
"""
StorageHelper.set_storage(self.schema.value, conf)
self.storagehelper.set_storage(self.schema.value, conf)
self.init_storage()
def support_transtype(self) -> dict:
@@ -99,7 +102,7 @@ class StorageBase(metaclass=ABCMeta):
"""
重置置配置
"""
StorageHelper.reset_storage(self.schema.value)
self.storagehelper.reset_storage(self.schema.value)
self.init_storage()
@abstractmethod

View File

@@ -24,6 +24,9 @@ class TransHandler:
文件转移整理类
"""
def __init__(self):
pass
@staticmethod
def __update_result(result: TransferInfo, **kwargs):
"""
@@ -53,8 +56,8 @@ class TransHandler:
current_value = value
setattr(result, key, current_value)
@staticmethod
def transfer_media(fileitem: FileItem,
def transfer_media(self,
fileitem: FileItem,
in_meta: MetaBase,
mediainfo: MediaInfo,
target_storage: str,
@@ -122,17 +125,17 @@ class TransHandler:
if fileitem.type == "dir":
# 整理整个目录,一般为蓝光原盘
if need_rename:
new_path = TransHandler.get_rename_path(
new_path = self.get_rename_path(
path=target_path,
template_string=rename_format,
rename_dict=TransHandler.get_naming_dict(meta=in_meta,
rename_dict=self.get_naming_dict(meta=in_meta,
mediainfo=mediainfo)
)
new_path = DirectoryHelper.get_media_root_path(
rename_format, rename_path=new_path
)
if not new_path:
TransHandler.__update_result(
self.__update_result(
result=result,
success=False,
message="重命名格式无效",
@@ -151,7 +154,7 @@ class TransHandler:
file.size for file in source_oper.list(stream_fileitem) or []
)
# 整理目录
new_diritem, errmsg = TransHandler.__transfer_dir(fileitem=fileitem,
new_diritem, errmsg = self.__transfer_dir(fileitem=fileitem,
mediainfo=mediainfo,
source_oper=source_oper,
target_oper=target_oper,
@@ -161,7 +164,7 @@ class TransHandler:
result=result)
if not new_diritem:
logger.error(f"文件夹 {fileitem.path} 整理失败:{errmsg}")
TransHandler.__update_result(result=result,
self.__update_result(result=result,
success=False,
message=errmsg,
fileitem=fileitem,
@@ -171,7 +174,7 @@ class TransHandler:
logger.info(f"文件夹 {fileitem.path} 整理成功")
# 返回整理后的路径
TransHandler.__update_result(result=result,
self.__update_result(result=result,
success=True,
fileitem=fileitem,
target_item=new_diritem,
@@ -186,7 +189,7 @@ class TransHandler:
# 电视剧
if in_meta.begin_episode is None:
logger.warn(f"文件 {fileitem.path} 整理失败:未识别到文件集数")
TransHandler.__update_result(result=result,
self.__update_result(result=result,
success=False,
message="未识别到文件集数",
fileitem=fileitem,
@@ -207,10 +210,10 @@ class TransHandler:
# 目的文件名
if need_rename:
new_file = TransHandler.get_rename_path(
new_file = self.get_rename_path(
path=target_path,
template_string=rename_format,
rename_dict=TransHandler.get_naming_dict(
rename_dict=self.get_naming_dict(
meta=in_meta,
mediainfo=mediainfo,
episodes_info=episodes_info,
@@ -220,14 +223,14 @@ class TransHandler:
# 针对字幕文件,文件名中补充额外标识信息
if __is_subtitle_file(fileitem):
new_file = TransHandler.__rename_subtitles(fileitem, new_file)
new_file = self.__rename_subtitles(fileitem, new_file)
# 文件目录
folder_path = DirectoryHelper.get_media_root_path(
rename_format, rename_path=new_file
)
if not folder_path:
TransHandler.__update_result(
self.__update_result(
result=result,
success=False,
message="重命名格式无效",
@@ -245,7 +248,7 @@ class TransHandler:
target_diritem = target_oper.get_folder(folder_path)
if not target_diritem:
logger.error(f"目标目录 {folder_path} 获取失败")
TransHandler.__update_result(result=result,
self.__update_result(result=result,
success=False,
message=f"目标目录 {folder_path} 获取失败",
fileitem=fileitem,
@@ -279,7 +282,7 @@ class TransHandler:
logger.info(f"目标文件文件大小更小,将覆盖:{new_file}")
overflag = True
else:
TransHandler.__update_result(result=result,
self.__update_result(result=result,
success=False,
message=f"媒体库存在同名文件,且质量更好",
fileitem=fileitem,
@@ -291,7 +294,7 @@ class TransHandler:
return result
elif overwrite_mode == 'never':
# 存在不覆盖
TransHandler.__update_result(result=result,
self.__update_result(result=result,
success=False,
message=f"媒体库存在同名文件,当前覆盖模式为不覆盖",
fileitem=fileitem,
@@ -310,13 +313,13 @@ class TransHandler:
# 文件不存在,但仅保留最新版本
logger.info(
f"当前整理覆盖模式设置为 {overwrite_mode},仅保留最新版本,正在删除已有版本文件 ...")
TransHandler.__delete_version_files(target_oper, new_file)
self.__delete_version_files(target_oper, new_file)
else:
# 附加文件 总是需要覆盖
overflag = True
# 整理文件
new_item, err_msg = TransHandler.__transfer_file(fileitem=fileitem,
new_item, err_msg = self.__transfer_file(fileitem=fileitem,
mediainfo=mediainfo,
target_storage=target_storage,
target_file=new_file,
@@ -327,7 +330,7 @@ class TransHandler:
result=result)
if not new_item:
logger.error(f"文件 {fileitem.path} 整理失败:{err_msg}")
TransHandler.__update_result(result=result,
self.__update_result(result=result,
success=False,
message=err_msg,
fileitem=fileitem,
@@ -337,7 +340,7 @@ class TransHandler:
return result
logger.info(f"文件 {fileitem.path} 整理成功")
TransHandler.__update_result(result=result,
self.__update_result(result=result,
success=True,
fileitem=fileitem,
target_item=new_item,
@@ -542,8 +545,7 @@ class TransHandler:
return new_file.with_name(new_file.stem + new_sub_tag + file_ext)
@staticmethod
def __transfer_dir(fileitem: FileItem, mediainfo: MediaInfo,
def __transfer_dir(self, fileitem: FileItem, mediainfo: MediaInfo,
source_oper: StorageBase, target_oper: StorageBase,
transfer_type: str, target_storage: str, target_path: Path,
result: TransferInfo) -> Tuple[Optional[FileItem], str]:
@@ -578,7 +580,7 @@ class TransHandler:
f"Reason: {event_data.reason}")
return None, event_data.reason
# 处理所有文件
state, errmsg = TransHandler.__transfer_dir_files(fileitem=fileitem,
state, errmsg = self.__transfer_dir_files(fileitem=fileitem,
target_storage=target_storage,
source_oper=source_oper,
target_oper=target_oper,
@@ -590,8 +592,7 @@ class TransHandler:
else:
return None, errmsg
@staticmethod
def __transfer_dir_files(fileitem: FileItem, target_storage: str,
def __transfer_dir_files(self, fileitem: FileItem, target_storage: str,
source_oper: StorageBase, target_oper: StorageBase,
transfer_type: str, target_path: Path,
result: TransferInfo) -> Tuple[bool, str]:
@@ -610,7 +611,7 @@ class TransHandler:
if item.type == "dir":
# 递归整理目录
new_path = target_path / item.name
state, errmsg = TransHandler.__transfer_dir_files(fileitem=item,
state, errmsg = self.__transfer_dir_files(fileitem=item,
target_storage=target_storage,
source_oper=source_oper,
target_oper=target_oper,
@@ -622,7 +623,7 @@ class TransHandler:
else:
# 整理文件
new_file = target_path / item.name
new_item, errmsg = TransHandler.__transfer_command(fileitem=item,
new_item, errmsg = self.__transfer_command(fileitem=item,
target_storage=target_storage,
source_oper=source_oper,
target_oper=target_oper,
@@ -630,7 +631,7 @@ class TransHandler:
transfer_type=transfer_type)
if not new_item:
return False, errmsg
TransHandler.__update_result(
self.__update_result(
result=result,
file_list=[item.path],
file_list_new=[new_item.path],
@@ -638,8 +639,7 @@ class TransHandler:
# 返回成功
return True, ""
@staticmethod
def __transfer_file(fileitem: FileItem, mediainfo: MediaInfo,
def __transfer_file(self, fileitem: FileItem, mediainfo: MediaInfo,
source_oper: StorageBase, target_oper: StorageBase,
target_storage: str, target_file: Path,
transfer_type: str, result: TransferInfo,
@@ -695,14 +695,14 @@ class TransHandler:
logger.info(f"正在删除已存在的文件:【{target_storage}{target_file}")
target_oper.delete(exists_item)
# 执行文件整理命令
new_item, errmsg = TransHandler.__transfer_command(fileitem=fileitem,
new_item, errmsg = self.__transfer_command(fileitem=fileitem,
target_storage=target_storage,
source_oper=source_oper,
target_oper=target_oper,
target_file=target_file,
transfer_type=transfer_type)
if new_item:
TransHandler.__update_result(
self.__update_result(
result=result,
file_list=[fileitem.path],
file_list_new=[new_item.path],