Archived
为什么:站内搜索的唯一上游通道,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)。