snowy-yang
|
4d3204213e
|
refactor: resolve_episode_url 阶梯构造拆解(58 行 / 圈 19 / 嵌套 3 → 36 行 / 圈 12 / 嵌套 2)
为什么:播客单集直链解析的唯一入口,前 20 行是降级阶梯的嵌套构造
(if 套 for 套 if),与尝试循环混在同一个函数里,改音质口径要通读全函数。
拆出:
- _falldown_order(模块级纯函数):降级尝试序列——auto→通用阶梯原序 /
已知音质→向下后缀 / 未知音质→该音质优先+通用阶梯,去重保序收敛为
dict.fromkeys;_FALLDOWN_LADDER 从函数内上移模块级
- resolve_episode_url 只剩尝试循环;song_id 的 int 防御上提循环外
(循环不变量:原实现首轮即判、失败直接 None,url_v1 从未收到过坏 sid)
先写测试后动代码:新增 tests/test_resolve_episode_url.py 11 例,在未改动
实现上一次跑绿,钉住核心口径——「只向下不向上」(standard 绝不回退到
exhigh,历史坑)、未知音质前置、垃圾 song_id 零请求、APIException 降级、
data[0] 无 url 降级、结果映射缺省值。
门禁:ruff 全过 · pyright 0/0 · pytest 370 passed(359→370)。
|
2026-09-27 11:00:50 +08:00 |
|