refactor(media): unify media identity and chain responsibilities

This commit is contained in:
jxxghp
2026-08-12 18:31:09 +08:00
parent cbb969e0ff
commit ca32922a7f
155 changed files with 8371 additions and 4526 deletions
+58
View File
@@ -69,3 +69,61 @@ def test_extended_ids_fall_back_when_installed_rust_is_old() -> None:
assert metainfo["media_source"] == "anilist"
assert metainfo["media_id"] == "154587"
def test_generic_identity_falls_back_when_installed_rust_is_old() -> None:
"""旧 Rust 扩展缺少通用字段时应直接使用 Python 解析器。"""
with patch(
"app.core.metainfo.rust_accel.supports_unified_media_identity",
return_value=False,
), patch(
"app.core.metainfo.rust_accel.find_metainfo",
side_effect=AssertionError("旧 Rust 扩展不应处理通用媒体身份"),
):
_, metainfo = find_metainfo(
"Frieren {[media_source=anilist;media_id=154587]}"
)
assert metainfo["media_source"] == "anilist"
assert metainfo["media_id"] == "154587"
@pytest.mark.parametrize(
"title",
[
"Movie {[media_source=themoviedb;media_id=0;type=movies]}",
"Movie {[tmdbid=0;type=movies]}",
"Movie [tmdbid=0]",
"Anime [anilist=0]",
],
)
def test_python_metainfo_rejects_zero_identity_and_removes_tag(title: str) -> None:
"""Python 标签解析器应移除零值标签,但不得生成媒体身份。"""
with patch("app.core.metainfo.rust_accel.find_metainfo", return_value=None):
parsed_title, metainfo = find_metainfo(title)
assert metainfo["media_source"] is None
assert metainfo["media_id"] is None
assert "=0" not in parsed_title
def test_metainfo_normalizes_zero_identity_from_old_rust_extension() -> None:
"""旧 Rust 扩展返回零值身份时,主程序边界仍应将统一对清空。"""
rust_result = {
"title": "Movie",
"metainfo": {
"media_source": "themoviedb",
"media_id": "0",
"tmdbid": 0,
},
}
with patch(
"app.core.metainfo.rust_accel.find_metainfo",
return_value=rust_result,
):
parsed_title, metainfo = find_metainfo("Movie [tmdbid=0]")
assert parsed_title == "Movie"
assert metainfo["media_source"] is None
assert metainfo["media_id"] is None
assert "tmdbid" not in metainfo