snowy-yang
d2e6856899
refactor: get_playlist_detail 批次拉取拆解(94 行 / 圈 24 / 嵌套 3 → 60 行 / 圈 9 / 嵌套 1)
为什么:歌单解析的唯一上游通道,94 行单函数把「歌单头解析 / trackIds
分批拉明细 / 失败批次记账 / incomplete 标记 / 错误映射」五件事揉在
一个 try 里;曲目字段映射与搜索歌曲路逐字段重复。
拆出(模块级,与 search_music 拆解同风格):
- _song_base_fields:歌曲条目公共字段(搜索/歌单共用同一容错口径),
_map_song_item 改为其加 type 键的包装
- _playlist_track_ids:trackIds → 字符串 ID 列表
- _collect_playlist_tracks:批次循环整体(失败批次计数、脏 ID 跳批、
明细缺 id 跳过、incomplete 判定输入),嵌套 3 是批次语义固有,
集中在单一职责函数内
保留语义:脏 ID('①'.isdigit() 为真但 int() 抛 ValueError)跳过整批
且不计 failed_batches;批次阶段网络错误仍映射「获取歌单详情请求失败」。
先写测试后动代码:新增 tests/test_playlist_detail.py 11 例,在未改动
实现上跑绿(修正 1 例测试自身的替身消费顺序),覆盖此前零测试路径——
playlist:null 防枚举、业务 code 错误、非 dict 响应、批次失败记账、
脏 ID 跳批、100/批分批、错误映射。
门禁:ruff 全过 · pyright 0/0 · pytest 359 passed(348→359)。
2026-09-27 10:53:48 +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-27 10:13:36 +08:00
2026-09-26 01:12:54 +08:00
2026-09-26 19:04:36 +08:00
2026-09-27 10:53:48 +08:00
2026-09-27 07:45:49 +08:00
2026-09-27 09:30:52 +08:00
2026-09-27 10:05:20 +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