mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-05 23:47:41 +08:00
fix(compat): 补齐刮削与规则拆分后的旧路径映射,保持插件导入可用
- app.chain.media 登记 ScrapingChain/ScrapingOption/ScrapingConfig 符号叠加, 刮削能力拆出 ScrapingChain 后旧模块路径仍可惰性解析 - app.application.filter/filter_rules 映射到收敛后的 app.application.rules - 补充旧路径模块身份与符号解析测试
This commit is contained in:
@@ -42,6 +42,20 @@ MODULE_ALIASES: Dict[str, ModuleAlias] = {
|
|||||||
introduced="v3.0.0",
|
introduced="v3.0.0",
|
||||||
owner="sdk",
|
owner="sdk",
|
||||||
),
|
),
|
||||||
|
# 规则域收敛为单一事实来源 app/application/rules.py:
|
||||||
|
# filter_rules.py(内置规则集 + RuleParser)更名而来,filter.py(RuleHelper)并入
|
||||||
|
"app.application.filter": ModuleAlias(
|
||||||
|
target="app.application.rules",
|
||||||
|
replacement="app.application.rules",
|
||||||
|
introduced="v3.0.0",
|
||||||
|
owner="application",
|
||||||
|
),
|
||||||
|
"app.application.filter_rules": ModuleAlias(
|
||||||
|
target="app.application.rules",
|
||||||
|
replacement="app.application.rules",
|
||||||
|
introduced="v3.0.0",
|
||||||
|
owner="application",
|
||||||
|
),
|
||||||
"app.db.agentchat_oper": ModuleAlias(
|
"app.db.agentchat_oper": ModuleAlias(
|
||||||
target="app.db.oper.agentchat",
|
target="app.db.oper.agentchat",
|
||||||
replacement="app.db.oper.agentchat",
|
replacement="app.db.oper.agentchat",
|
||||||
@@ -748,6 +762,16 @@ SYMBOL_ALIASES: Dict[str, Dict[str, SymbolAlias]] = {
|
|||||||
replacement="app.schemas.agent.ReplyMode",
|
replacement="app.schemas.agent.ReplyMode",
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
|
# 刮削能力从 MediaChain 拆出为独立 ScrapingChain 后,
|
||||||
|
# 原 app.chain.media 模块级公开的刮削选项与策略配置随迁到 app.chain.scraping
|
||||||
|
"app.chain.media": {
|
||||||
|
name: SymbolAlias(
|
||||||
|
target_module="app.chain.scraping",
|
||||||
|
target_name=name,
|
||||||
|
replacement=f"app.chain.scraping.{name}",
|
||||||
|
)
|
||||||
|
for name in ("ScrapingChain", "ScrapingOption", "ScrapingConfig")
|
||||||
|
},
|
||||||
"app.chain.message": {
|
"app.chain.message": {
|
||||||
"MediaInteractionChain": SymbolAlias(
|
"MediaInteractionChain": SymbolAlias(
|
||||||
target_module="app.chain.interaction",
|
target_module="app.chain.interaction",
|
||||||
|
|||||||
@@ -280,6 +280,27 @@ def test_physical_modules_resolve_moved_symbols_without_reverse_imports():
|
|||||||
assert schemas_package.TransferQueue is legacy_transfer.TransferQueue
|
assert schemas_package.TransferQueue is legacy_transfer.TransferQueue
|
||||||
|
|
||||||
|
|
||||||
|
def test_chain_media_legacy_scraping_symbols_resolve_to_scraping_chain():
|
||||||
|
"""刮削拆分后,旧 app.chain.media 路径应能继续取用刮削公开符号。"""
|
||||||
|
legacy_media = importlib.import_module("app.chain.media")
|
||||||
|
canonical_scraping = importlib.import_module("app.chain.scraping")
|
||||||
|
|
||||||
|
assert legacy_media.ScrapingChain is canonical_scraping.ScrapingChain
|
||||||
|
assert legacy_media.ScrapingOption is canonical_scraping.ScrapingOption
|
||||||
|
assert legacy_media.ScrapingConfig is canonical_scraping.ScrapingConfig
|
||||||
|
|
||||||
|
|
||||||
|
def test_rules_domain_legacy_modules_resolve_to_rules():
|
||||||
|
"""规则域收敛后,filter/filter_rules 旧路径应复用 rules 模块。"""
|
||||||
|
canonical = importlib.import_module("app.application.rules")
|
||||||
|
|
||||||
|
for legacy_name in ("app.application.filter", "app.application.filter_rules"):
|
||||||
|
legacy = importlib.import_module(legacy_name)
|
||||||
|
assert legacy is canonical, legacy_name
|
||||||
|
assert legacy.RuleHelper is canonical.RuleHelper
|
||||||
|
assert legacy.RuleParser is canonical.RuleParser
|
||||||
|
|
||||||
|
|
||||||
def test_debug_diagnostics_reports_moved_symbol_path():
|
def test_debug_diagnostics_reports_moved_symbol_path():
|
||||||
"""DEBUG 模式应对物理模块中的旧符号路径给出一次迁移提示。"""
|
"""DEBUG 模式应对物理模块中的旧符号路径给出一次迁移提示。"""
|
||||||
messages = []
|
messages = []
|
||||||
@@ -317,7 +338,7 @@ def test_plugin_scan_reports_moved_symbol_import(tmp_path: Path):
|
|||||||
|
|
||||||
|
|
||||||
def test_symbol_alias_manifest_covers_all_moved_public_symbols():
|
def test_symbol_alias_manifest_covers_all_moved_public_symbols():
|
||||||
"""符号级映射清单应覆盖媒体身份、整理工作项与消息/通知命名统一的旧入口。"""
|
"""符号级映射清单应覆盖媒体身份、整理工作项、刮削拆分与消息/通知命名统一的旧入口。"""
|
||||||
assert set(SYMBOL_ALIASES["app.domain.media"]) == {
|
assert set(SYMBOL_ALIASES["app.domain.media"]) == {
|
||||||
"MEDIA_SOURCE_ALIASES",
|
"MEDIA_SOURCE_ALIASES",
|
||||||
"MEDIA_SOURCE_PREFIXES",
|
"MEDIA_SOURCE_PREFIXES",
|
||||||
@@ -327,6 +348,11 @@ def test_symbol_alias_manifest_covers_all_moved_public_symbols():
|
|||||||
"normalize_media_identity_payload",
|
"normalize_media_identity_payload",
|
||||||
"build_media_key",
|
"build_media_key",
|
||||||
}
|
}
|
||||||
|
assert set(SYMBOL_ALIASES["app.chain.media"]) == {
|
||||||
|
"ScrapingChain",
|
||||||
|
"ScrapingOption",
|
||||||
|
"ScrapingConfig",
|
||||||
|
}
|
||||||
assert set(SYMBOL_ALIASES["app.schemas"]) == {
|
assert set(SYMBOL_ALIASES["app.schemas"]) == {
|
||||||
"TransferTask",
|
"TransferTask",
|
||||||
"TransferQueue",
|
"TransferQueue",
|
||||||
|
|||||||
Reference in New Issue
Block a user