refactor: unify emby family item formatting

This commit is contained in:
jxxghp
2026-08-24 06:08:04 +08:00
parent 073ff7ff81
commit 1047bfa821
8 changed files with 115 additions and 157 deletions
+4 -2
View File
@@ -13,8 +13,8 @@
"runtime_to_db": [],
"workflow_to_db": []
},
"edge_count": 6543,
"edge_sha256": "b9b6ba268382e7027f5557643defb09848c054cb68079345f2394d9b7faeb42c",
"edge_count": 6545,
"edge_sha256": "5a57ed0ff52fda67abf49f5ca956fea0adeb0ac595054e0f8f81374ad843a2bd",
"edges": [
"app -> app.runtime",
"app -> app.runtime.compat",
@@ -2595,6 +2595,8 @@
"app.application.mediaserver -> app.application.service",
"app.application.mediaserver -> app.domain",
"app.application.mediaserver -> app.domain.context",
"app.application.mediaserver -> app.runtime",
"app.application.mediaserver -> app.runtime.log",
"app.application.mediaserver -> app.schemas",
"app.application.mediaserver -> app.schemas.media",
"app.application.mediaserver -> app.schemas.mediaserver",
+1 -5
View File
@@ -17,11 +17,7 @@ MIN_FINGERPRINT_SIZE = 1000
# 参与告警的最小函数体节点数:过滤 setter/getter 等小函数。
MIN_FUNCTION_SIZE = 40
# 存量白名单:(模块名, 函数名) 集合,各 Phase 清理后同步移除。
KNOWN_DUPLICATES = {
# 服务实现类(非模块类)的条目信息格式化样板(待后续 Phase 清理)。
("app.modules.jellyfin.jellyfin", "__format_item_info"),
("app.modules.zspace.zspace", "__format_item_info"),
}
KNOWN_DUPLICATES: set[tuple[str, str]] = set()
def _normalize(node: ast.AST) -> str:
+26 -9
View File
@@ -14,8 +14,8 @@ from app.modules.jellyfin import JellyfinModule
from app.modules.jellyfin.jellyfin import Jellyfin
from app.modules.plex import PlexModule
from app.modules.plex.plex import Plex
from app.modules.trimemedia import TrimeMediaModule
from app.modules.ugreen import UgreenModule
from app.modules.trimemedia import TrimeMediaModule # pylint: disable=no-name-in-module
from app.modules.ugreen import UgreenModule # pylint: disable=no-name-in-module
from app.modules.zspace import ZSpaceModule
from app.modules.zspace.zspace import ZSpace
@@ -97,25 +97,42 @@ def test_music_media_server_helper_normalizes_emby_music_fields():
@pytest.mark.parametrize(
"formatter",
("formatter", "server", "server_id"),
[
Emby._Emby__format_item_info,
Jellyfin._Jellyfin__format_item_info,
ZSpace._ZSpace__format_item_info,
(Emby._Emby__format_item_info, "emby", "server-1"),
(Jellyfin._Jellyfin__format_item_info, "jellyfin", None),
(ZSpace._ZSpace__format_item_info, "zspace", None),
],
)
def test_emby_family_clients_preserve_music_match_fields(formatter):
"""Emby 系客户端格式化音乐结果时必须保留艺术家、专辑和曲目数"""
def test_emby_family_clients_preserve_item_contract(formatter, server, server_id):
"""Emby 系客户端复用统一转换时必须保留服务身份及音乐匹配字段"""
item = formatter({
"Id": "album-1",
"ServerId": "server-1",
"ParentId": "library-1",
"Type": "MusicAlbum",
"Name": "叶惠美",
"AlbumArtists": [{"Name": "周杰伦"}],
"ChildCount": 11,
"ProviderIds": {},
"ProviderIds": {"Tmdb": "123"},
"UserData": {
"Played": False,
"PlaybackPositionTicks": 1,
"LastPlayedDate": "2026-08-24T12:34:56.123456Z",
"PlayCount": 2,
"PlayedPercentage": 25.5,
},
})
assert item is not None
assert item.server == server
assert item.server_id == server_id
assert item.library == "library-1"
assert item.media_source == "themoviedb"
assert item.media_id == "123"
assert item.user_state is not None
assert item.user_state.resume is True
assert item.user_state.last_played_date == "2026-08-24 12:34:56"
assert item.note == {
"artist": "周杰伦",
"artists": ["周杰伦"],