mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-10-29 03:18:14 +08:00
严格检查全部宿主源码,清零类型错误预算并移除按模块类型豁免。 按原因、所属方法、错误码及语法指纹锁定必要兼容例外和站点类型桩, CI 阻断新增忽略、检查范围退化、本地桩替代真实接口及新的类型错误。 修复空值、异步和供应方类型边界,保持插件与 API 兼容合同, 并补充存储、订阅、通知、Agent 和工作流边界的回归覆盖。
92 lines
2.2 KiB
Python
92 lines
2.2 KiB
Python
"""
|
|
宿主模块目录的应用层端口。
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from collections.abc import Callable
|
|
from typing import Any, Protocol
|
|
|
|
|
|
class ModuleRuntime(Protocol):
|
|
"""
|
|
声明入口层消费的模块目录能力。
|
|
"""
|
|
|
|
def __getattr__(self, name: str) -> Any:
|
|
"""
|
|
允许兼容门面访问既有模块管理方法。
|
|
|
|
:param name: 调用方访问的既有模块管理成员名称
|
|
:return: 已装配模块运行时对应的成员或可调用管理方法
|
|
"""
|
|
|
|
|
|
ModuleRuntimeProvider = Callable[[], ModuleRuntime]
|
|
|
|
|
|
def _unconfigured_runtime() -> ModuleRuntime:
|
|
"""
|
|
拒绝在组合根装配前隐式创建模块管理器。
|
|
"""
|
|
raise RuntimeError("宿主模块运行时尚未由启动组合根装配")
|
|
|
|
|
|
_runtime_provider: ModuleRuntimeProvider = _unconfigured_runtime
|
|
|
|
|
|
def configure_module_runtime(provider: ModuleRuntimeProvider) -> None:
|
|
"""
|
|
由启动组合根注册模块运行时实例提供器。
|
|
"""
|
|
global _runtime_provider
|
|
_runtime_provider = provider
|
|
|
|
|
|
def reset_module_runtime() -> None:
|
|
"""
|
|
恢复未装配模块运行时,禁止跨 lifespan 复用旧目录。
|
|
"""
|
|
global _runtime_provider
|
|
_runtime_provider = _unconfigured_runtime
|
|
|
|
|
|
def get_module_manager() -> ModuleRuntime:
|
|
"""
|
|
返回当前组合根提供的模块目录能力。
|
|
"""
|
|
return _runtime_provider()
|
|
|
|
|
|
class _ModuleRuntimeProxy(type):
|
|
"""
|
|
把历史 ``ModuleManager`` 调用转发到应用端口。
|
|
"""
|
|
|
|
def __getattr__(cls, name: str) -> Any:
|
|
"""
|
|
转发旧的类级静态调用。
|
|
"""
|
|
return getattr(get_module_manager(), name)
|
|
|
|
|
|
class ModuleManager(metaclass=_ModuleRuntimeProxy):
|
|
"""
|
|
应用层兼容门面,实例调用返回组合根装配的模块管理器。
|
|
"""
|
|
|
|
def __new__(cls) -> Any:
|
|
"""
|
|
返回组合根提供的对象,其具体类型由装配决定,兼容门面不持有运行态注册表。
|
|
"""
|
|
return get_module_manager()
|
|
|
|
|
|
__all__ = [
|
|
"ModuleManager",
|
|
"ModuleRuntime",
|
|
"configure_module_runtime",
|
|
"get_module_manager",
|
|
"reset_module_runtime",
|
|
]
|