fix(compat): 补齐刮削与规则拆分后的旧路径映射,保持插件导入可用

- app.chain.media 登记 ScrapingChain/ScrapingOption/ScrapingConfig 符号叠加,
  刮削能力拆出 ScrapingChain 后旧模块路径仍可惰性解析
- app.application.filter/filter_rules 映射到收敛后的 app.application.rules
- 补充旧路径模块身份与符号解析测试
This commit is contained in:
jxxghp
2026-08-17 09:06:27 +08:00
parent d7e610e656
commit 134c00fc7f
2 changed files with 51 additions and 1 deletions
+24
View File
@@ -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.pyRuleHelper)并入
"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",
+27 -1
View File
@@ -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",