mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-10-30 03:48:03 +08:00
158 lines
7.7 KiB
Python
158 lines
7.7 KiB
Python
"""
|
||
Chain 兼容门面所需运行时依赖的显式上下文。
|
||
"""
|
||
|
||
from __future__ import annotations
|
||
|
||
from collections.abc import Callable
|
||
from contextlib import AbstractContextManager
|
||
from dataclasses import dataclass, field
|
||
from typing import TYPE_CHECKING, Any, Optional
|
||
|
||
from app.application.chain.events import ChainDurableEventWriter
|
||
from app.application.configuration import ChainRuntimeConfig
|
||
from app.runtime.stop import StopState, runtime_stop_state
|
||
|
||
if TYPE_CHECKING:
|
||
from app.application.classification.execution import ClassificationExecutionPort
|
||
from app.application.download.failures import DownloadFailureRepository
|
||
from app.application.history import (
|
||
DownloadHistoryRepository,
|
||
TransferHistoryRepository,
|
||
)
|
||
from app.application.mediaserver import MediaServerRepository
|
||
from app.application.messaging.message import MessageHelper, MessageQueueManager
|
||
from app.application.rules import SyncRuleGroupMutationService
|
||
from app.application.security.user import ChainUserRepository
|
||
from app.application.site.contract import SiteRepository
|
||
from app.application.site.mutation import SyncSiteReferenceMutationService
|
||
from app.application.subscription.activity import SubscriptionActivityService
|
||
from app.application.subscription.complete import CompletionScope
|
||
from app.application.subscription.contract import SubscriptionRepository
|
||
from app.application.subscription.delete import (
|
||
DeleteSubscribeScope,
|
||
SyncDeleteSubscribeScope,
|
||
)
|
||
from app.application.subscription.execution import SubscriptionSearchRepository
|
||
from app.application.subscription.mutation import (
|
||
SubscriptionMutationScope,
|
||
SyncSubscriptionMutationScope,
|
||
)
|
||
from app.application.system import SystemService
|
||
from app.application.transfer.execution import TransferExecutionRepository
|
||
from app.application.transfer.workflow import TransferAdmissionRepository
|
||
|
||
ModuleDispatcherFactory = Callable[..., Any]
|
||
LegacyTransferCommand = Callable[..., Any]
|
||
ChainRuntimeContextProvider = Callable[[], "ChainRuntimeContext"]
|
||
|
||
|
||
@dataclass(frozen=True, slots=True)
|
||
class ChainRuntimeContext:
|
||
"""
|
||
集中声明 Chain 调度、事件、消息和缓存所需的最小运行时对象。
|
||
|
||
:param module_manager: 宿主模块发现与运行状态管理器
|
||
:param plugin_manager: 宿主插件管理器,用于兼容门面查询
|
||
:param event_manager: 进程内事件发布和处理管理器
|
||
:param message_oper: 消息历史持久化操作入口
|
||
:param message_helper: 消息渲染和发送应用服务
|
||
:param file_cache: 链层同步文件缓存入口
|
||
:param async_file_cache: 链层异步文件缓存入口
|
||
:param message_queue: 管理通知排队和投递的消息队列
|
||
:param module_dispatcher_factory: 构造按方法名分发模块调用的调度器工厂
|
||
:param site_repository: 站点配置、用户数据及健康统计仓储
|
||
:param subscription_repository: 订阅查询和独立事务写入仓储
|
||
:param subscription_mutation_scope: 创建异步订阅修改服务及共享事务的作用域
|
||
:param sync_subscription_mutation_scope: 创建同步订阅修改服务及共享事务的作用域
|
||
:param subscription_delete_scope: 创建异步订阅删除事务的作用域
|
||
:param sync_subscription_delete_scope: 创建同步订阅删除事务的作用域
|
||
:param subscription_completion_scope: 创建订阅完成、历史与副作用共同提交的作用域
|
||
:param rule_group_mutation_scope: 创建规则组及订阅引用同步修改事务的作用域
|
||
:param site_reference_mutation_scope: 创建站点引用同步清理事务的作用域
|
||
:param download_history_repository: 下载历史和关联文件的仓储
|
||
:param transfer_history_repository: 整理历史查询与写入仓储
|
||
:param transfer_admission_repository: 持久整理任务准入及排队仓储
|
||
:param transfer_execution_repository: 持久整理任务认领、检查点与结算仓储
|
||
:param media_server_repository: 媒体服务器同步数据读取仓储
|
||
:param download_failure_repository: 下载失败冷却状态仓储
|
||
:param user_repository: 链层读取本地用户归属和权限的仓储
|
||
:param subscription_activity: 订阅活动记录服务;None 表示未装配
|
||
:param classification_service: 完整媒体结果分类执行服务;None 表示未装配
|
||
:param subscription_search_repository: 持久订阅搜索任务仓储;None 表示未装配
|
||
:param legacy_transfer_command: 兼容旧整理调用的命令;None 表示未提供
|
||
:param durable_event_writer: 业务记录与事件投递意图原子写入端口;None 表示未装配
|
||
:param configuration: 未提供动态读取器时使用的配置快照,默认媒体扩展名为空
|
||
:param configuration_provider: 按调用读取最新配置的函数;None 使用静态快照
|
||
:param stop_state: 查询进程停止请求的状态对象,默认使用宿主全局状态
|
||
:param system_service: 系统操作应用服务;None 表示未装配
|
||
"""
|
||
|
||
module_manager: Any
|
||
plugin_manager: Any
|
||
event_manager: Any
|
||
message_oper: Any
|
||
message_helper: MessageHelper
|
||
file_cache: Any
|
||
async_file_cache: Any
|
||
message_queue: MessageQueueManager
|
||
module_dispatcher_factory: ModuleDispatcherFactory
|
||
site_repository: SiteRepository
|
||
subscription_repository: SubscriptionRepository
|
||
subscription_mutation_scope: SubscriptionMutationScope
|
||
sync_subscription_mutation_scope: SyncSubscriptionMutationScope
|
||
subscription_delete_scope: DeleteSubscribeScope
|
||
sync_subscription_delete_scope: SyncDeleteSubscribeScope
|
||
subscription_completion_scope: CompletionScope
|
||
rule_group_mutation_scope: Callable[
|
||
[], AbstractContextManager[SyncRuleGroupMutationService]
|
||
]
|
||
site_reference_mutation_scope: Callable[
|
||
[], AbstractContextManager[SyncSiteReferenceMutationService]
|
||
]
|
||
download_history_repository: DownloadHistoryRepository
|
||
transfer_history_repository: TransferHistoryRepository
|
||
transfer_admission_repository: TransferAdmissionRepository
|
||
transfer_execution_repository: TransferExecutionRepository
|
||
media_server_repository: MediaServerRepository
|
||
download_failure_repository: DownloadFailureRepository
|
||
user_repository: ChainUserRepository
|
||
subscription_activity: Optional[SubscriptionActivityService] = None
|
||
classification_service: Optional[ClassificationExecutionPort] = None
|
||
subscription_search_repository: Optional[SubscriptionSearchRepository] = None
|
||
legacy_transfer_command: Optional[LegacyTransferCommand] = None
|
||
durable_event_writer: Optional[ChainDurableEventWriter] = None
|
||
configuration: ChainRuntimeConfig = field(
|
||
default_factory=lambda: ChainRuntimeConfig(media_extensions=())
|
||
)
|
||
configuration_provider: Optional[Callable[[], ChainRuntimeConfig]] = None
|
||
stop_state: StopState = field(default_factory=lambda: runtime_stop_state)
|
||
system_service: Optional[SystemService] = None
|
||
|
||
|
||
def _unconfigured_chain_runtime_context() -> ChainRuntimeContext:
|
||
"""
|
||
拒绝在组合根装配前隐式抓取全局管理器。
|
||
"""
|
||
raise RuntimeError("Chain 运行上下文尚未由启动组合根配置")
|
||
|
||
|
||
_context_provider: ChainRuntimeContextProvider = _unconfigured_chain_runtime_context
|
||
|
||
|
||
def configure_chain_runtime_context_provider(
|
||
provider: Optional[ChainRuntimeContextProvider],
|
||
) -> None:
|
||
"""
|
||
由组合根替换 Chain 上下文来源;传入空值恢复未配置状态。
|
||
"""
|
||
global _context_provider
|
||
_context_provider = provider or _unconfigured_chain_runtime_context
|
||
|
||
|
||
def get_chain_runtime_context() -> ChainRuntimeContext:
|
||
"""
|
||
返回当前组合根提供的 Chain 运行上下文。
|
||
"""
|
||
return _context_provider()
|