mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-05 07:27:15 +08:00
refactor(runtime): activate managed resources on demand (#6334)
This commit is contained in:
@@ -37,6 +37,7 @@ from app.schemas.types import EventType, SystemConfigKey
|
||||
|
||||
LegacyDiagnosticsConfigurator = Callable[..., None]
|
||||
LegacyImportScanner = Callable[..., None]
|
||||
LegacyPluginImportPreparer = Callable[..., None]
|
||||
PluginInstallReporter = Callable[..., None]
|
||||
SiteAuthLevelProvider = Callable[[], int]
|
||||
|
||||
@@ -45,6 +46,10 @@ def _ignore_legacy_diagnostics(**_kwargs) -> None:
|
||||
"""在启动组合根尚未注入兼容服务时保持插件加载可用。"""
|
||||
|
||||
|
||||
def _ignore_plugin_resource_imports(**_kwargs) -> None:
|
||||
"""未进入应用启动组合时不主动创建进程级宿主资源。"""
|
||||
|
||||
|
||||
def _unavailable_site_auth_level() -> int:
|
||||
"""站点能力尚未装配时返回未认证等级。"""
|
||||
return 0
|
||||
@@ -54,6 +59,9 @@ _legacy_diagnostics_configurator: LegacyDiagnosticsConfigurator = (
|
||||
_ignore_legacy_diagnostics
|
||||
)
|
||||
_legacy_import_scanner: LegacyImportScanner = _ignore_legacy_diagnostics
|
||||
_legacy_plugin_import_preparer: LegacyPluginImportPreparer = (
|
||||
_ignore_plugin_resource_imports
|
||||
)
|
||||
_plugin_install_reporter: PluginInstallReporter = _ignore_legacy_diagnostics
|
||||
_site_auth_level_provider: SiteAuthLevelProvider = _unavailable_site_auth_level
|
||||
|
||||
@@ -69,6 +77,14 @@ def configure_plugin_legacy_import_services(
|
||||
_legacy_import_scanner = import_scanner
|
||||
|
||||
|
||||
def configure_plugin_resource_import_preparer(
|
||||
preparer: LegacyPluginImportPreparer,
|
||||
) -> None:
|
||||
"""注入旧插件导入前的宿主资源准备器。"""
|
||||
global _legacy_plugin_import_preparer
|
||||
_legacy_plugin_import_preparer = preparer
|
||||
|
||||
|
||||
def configure_plugin_install_reporter(reporter: PluginInstallReporter) -> None:
|
||||
"""由启动组合根注入插件安装上报器,避免扩展层依赖远程服务。"""
|
||||
global _plugin_install_reporter
|
||||
@@ -318,6 +334,13 @@ class PluginManager(ConfigReloadMixin, metaclass=Singleton):
|
||||
module_name = f"app.plugins.{plugin_dir.name}"
|
||||
logger.debug(f"正在导入插件模块:{module_name}")
|
||||
|
||||
# 旧插件可能直接导入带宿主资源前置条件的第三方包。资源必须在
|
||||
# Python 执行插件模块顶层代码前就绪,否则导入副作用无法安全回滚。
|
||||
_legacy_plugin_import_preparer(
|
||||
plugin_id=plugin_dir.name,
|
||||
plugin_dir=plugin_dir,
|
||||
)
|
||||
|
||||
_legacy_import_scanner(
|
||||
plugin_id=plugin_dir.name,
|
||||
plugin_dir=plugin_dir,
|
||||
|
||||
Reference in New Issue
Block a user