mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-06-05 15:39:40 +08:00
refactor (module): improve the implementation of base classes
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
from abc import abstractmethod, ABCMeta
|
||||
from typing import Tuple, Union, Dict, Any, Optional
|
||||
from typing import Dict, Any, Optional, Generic, Tuple, Union, TypeVar
|
||||
|
||||
from app.schemas import Notification, MessageChannel, NotificationConf, MediaServerConf
|
||||
from app.schemas import Notification, MessageChannel, NotificationConf, MediaServerConf, DownloaderConf
|
||||
|
||||
|
||||
class _ModuleBase(metaclass=ABCMeta):
|
||||
@@ -49,35 +49,46 @@ class _ModuleBase(metaclass=ABCMeta):
|
||||
pass
|
||||
|
||||
|
||||
class _MessageBase:
|
||||
# 定义一个泛型 T,用于表示具体的配置类型
|
||||
TConf = TypeVar("TConf")
|
||||
|
||||
|
||||
class ConfManagerBase(Generic[TConf]):
|
||||
"""
|
||||
消息基类
|
||||
通用管理基类,支持配置管理和实例管理
|
||||
"""
|
||||
|
||||
_channel: MessageChannel = None
|
||||
_configs: Dict[str, NotificationConf] = {}
|
||||
_clients: Dict[str, Any] = {}
|
||||
_configs: Dict[str, TConf] = {}
|
||||
_instances: Dict[str, Any] = {}
|
||||
|
||||
def get_client(self, name: str) -> Optional[Any]:
|
||||
def get_instance(self, name: str) -> Optional[Any]:
|
||||
"""
|
||||
获取客户端
|
||||
获取实例 (如服务/客户端)
|
||||
"""
|
||||
if not name:
|
||||
return None
|
||||
return self._clients.get(name)
|
||||
return self._instances.get(name)
|
||||
|
||||
def get_config(self, name: str, ctype: str = None) -> Optional[NotificationConf]:
|
||||
def get_config(self, name: str, ctype: str = None) -> Optional[TConf]:
|
||||
"""
|
||||
获取配置
|
||||
获取配置,支持类型过滤
|
||||
"""
|
||||
if not name:
|
||||
return None
|
||||
conf = self._configs.get(name)
|
||||
if not ctype:
|
||||
return conf
|
||||
return conf if conf.type == ctype else None
|
||||
return conf if getattr(conf, "type", None) == ctype else None
|
||||
|
||||
def checkMessage(self, message: Notification, source: str = None) -> bool:
|
||||
|
||||
class _MessageBase(ConfManagerBase[NotificationConf]):
|
||||
"""
|
||||
消息基类,继承了通用的配置和实例管理功能,指定配置类型为 NotificationConf
|
||||
"""
|
||||
|
||||
_channel: MessageChannel = None
|
||||
|
||||
def check_message(self, message: Notification, source: str = None) -> bool:
|
||||
"""
|
||||
检查消息渠道及消息类型,如不符合则不处理
|
||||
"""
|
||||
@@ -97,45 +108,25 @@ class _MessageBase:
|
||||
return True
|
||||
|
||||
|
||||
class _DownloaderBase:
|
||||
class _DownloaderBase(ConfManagerBase[DownloaderConf]):
|
||||
"""
|
||||
下载器基类
|
||||
"""
|
||||
|
||||
_servers: Dict[str, Any] = {}
|
||||
_default_server: Any = None
|
||||
_default_server_name: str = None
|
||||
|
||||
def get_server(self, name: str = None) -> Optional[Any]:
|
||||
def get_instance(self, name: str = None) -> Optional[Any]:
|
||||
"""
|
||||
获取服务器,name为空则返回默认服务器
|
||||
获取实例,name为空时,返回默认实例
|
||||
"""
|
||||
if name:
|
||||
return self._servers.get(name)
|
||||
return self.get_instance(name)
|
||||
return self._default_server
|
||||
|
||||
|
||||
class _MediaServerBase:
|
||||
class _MediaServerBase(ConfManagerBase[MediaServerConf]):
|
||||
"""
|
||||
媒体服务器基类
|
||||
"""
|
||||
|
||||
_servers: Dict[str, Any] = {}
|
||||
_configs: Dict[str, MediaServerConf] = {}
|
||||
|
||||
def get_server(self, name: str) -> Optional[Any]:
|
||||
"""
|
||||
获取Plex服务器
|
||||
"""
|
||||
return self._servers.get(name)
|
||||
|
||||
def get_config(self, name: str, mtype: str = None) -> Optional[MediaServerConf]:
|
||||
"""
|
||||
获取配置
|
||||
"""
|
||||
if not name:
|
||||
return None
|
||||
conf = self._configs.get(name)
|
||||
if not mtype:
|
||||
return conf
|
||||
return conf if conf.type == mtype else None
|
||||
pass
|
||||
|
||||
Reference in New Issue
Block a user