snowy-yang
e00ac14460
refactor: search_music 四路映射拆解(101 行 / 圈 32 / 嵌套 6 → 42 行 / 圈 7 / 嵌套 1)
为什么:站内搜索的唯一上游通道,101 行里 if/elif 四路条目映射占了
2/3,错误映射与字段容错口径(歌曲 artists 空缺兜底未知歌手、专辑
不兜底、alias 缺省 '' 等)全埋在分支里,改一路要通读全函数。
拆出(模块级,与既有 _ensure_dict 同风格):
- _map_song_item / _map_album_item / _map_artist_item / _map_playlist_item
——四路口径原样,docstring 标注各路容错差异
- _SEARCH_RESULT_KEYS + _SEARCH_ITEM_MAPPERS 派发表(未知类型不在表内
→ 空结果,原 if/elif 无 else 行为一致)
- _collect_search_items 统一「取键 → 无 id 跳过 → 映射」
先写测试后动代码:新增 tests/test_search_music.py 12 例,在未改动
实现上跑绿(修正 1 例替身形状:网络异常必须抛垫片自己的
RequestException,aiohttp.ClientError 由 aiohttp_compat 内部翻译,
直接抛底层是不存在的形状)。契约测试不为违反 offset: int 签名的
None 入参背书(防御性 int(offset or 0) 保留,不测)。
门禁:ruff 全过 · pyright 0/0 · pytest 330 passed(319→330)。
2026-09-27 09:42:07 +08:00
..
2026-09-27 09:19:23 +08:00
2026-09-26 14:37:58 +08:00
2026-09-26 11:52:06 +08:00
2026-09-26 13:54:44 +08:00
2026-09-26 14:37:58 +08:00
2026-09-27 09:36:31 +08:00
2026-09-26 14:37:58 +08:00
2026-09-26 11:52:06 +08:00
2026-09-27 07:32:05 +08:00
2026-09-26 14:37:58 +08:00
2026-09-27 08:05:44 +08:00
2026-09-26 14:37:58 +08:00
2026-09-26 11:52:06 +08:00
2026-09-26 01:12:54 +08:00
2026-09-26 19:04:36 +08:00
2026-09-27 07:45:49 +08:00
2026-09-27 09:30:52 +08:00
2026-09-26 14:37:58 +08:00
2026-09-26 00:34:11 +08:00
2026-09-26 14:37:58 +08:00
2026-09-27 09:42:07 +08:00
2026-09-26 18:53:47 +08:00
2026-09-27 09:03:05 +08:00
2026-09-27 07:41:16 +08:00
2026-09-26 11:52:06 +08:00
2026-09-26 13:54:44 +08:00
2026-09-26 18:53:40 +08:00
2026-09-26 19:25:06 +08:00