refactor: 移除 music_api 的 16 个死掉的同步兼容门面

music_api/compat.py 是「同步调用异步实现」的桥接门面——每个方法都用
core.async_bridge.run_sync 把 NeteaseAPI 的协程跑起来。调用方此前已陆续
迁到原生异步(await NeteaseAPI().xxx()),这 16 个方法在仓内(web/
services/ tests/ CLI)已零调用,只剩 __init__ 的再导出,属迁移期残留。

仅 url_v1 还有唯一调用方(music_api.podcast 的同步解析路径),予以保留,
并在 docstring 标注「应删不应增」,待 worker 子系统异步化时一并清除。

门禁:ruff 全过 / pyright 0-0 / pytest 387 项,失败数与前次一致(2 项
index golden,源于未提交的前端迁移,与本次无关)。
This commit is contained in:
snowy-yang committed 2026-09-27 17:51:22 +08:00
1 parent 6fb37534d3
commit 0dbbb3ed63
2 files changed
+5 -142

No files matched your search

-34
View File
@@ -24,24 +24,7 @@ from .client import (
_ensure_dict, _ensure_dict,
) )
from .compat import ( from .compat import (
account_info,
album_detail,
album_subscribe,
artist_songs,
detect_vip_by_probe,
get_pic_url,
lyric_v1,
name_v1,
playlist_detail,
playlist_subscribe,
post_comment,
probe_levels,
qr_login,
search_music,
song_comments,
toplist_list,
url_v1, url_v1,
user_playlists,
) )
from .constants import ( from .constants import (
APIConstants, APIConstants,
@@ -76,24 +59,7 @@ __all__ = [
'WeapiCrypto', 'WeapiCrypto',
'_as_dict', '_as_dict',
'_ensure_dict', '_ensure_dict',
'account_info',
'album_detail',
'album_subscribe',
'artist_songs',
'detect_vip_by_probe',
'get_pic_url',
'load_cookies', 'load_cookies',
'lyric_v1',
'name_v1',
'parse_cookie_string', 'parse_cookie_string',
'playlist_detail',
'playlist_subscribe',
'post_comment',
'probe_levels',
'qr_login',
'search_music',
'song_comments',
'toplist_list',
'url_v1', 'url_v1',
'user_playlists',
] ]
+5 -108
View File
@@ -2,6 +2,11 @@
"""同步兼容函数接口(内部经 run_sync 桥接异步实现)。 """同步兼容函数接口(内部经 run_sync 桥接异步实现)。
(自 music_api.py 拆出,行为与原实现一致。) (自 music_api.py 拆出,行为与原实现一致。)
⚠️ 迁移期残留:本模块的定位是「同步代码调用异步实现」的桥接门面。调用方陆续
改为原生异步(`await NeteaseAPI().xxx()`)后,这里的方法即成为死代码,应删除而
非新增。当前仅 `url_v1` 仍有唯一调用方(`music_api.podcast` 的同步解析路径),
故本文件只保留它——其余 16 个同步门面已随调用方异步化一并移除。
""" """
from typing import Any from typing import Any
@@ -11,9 +16,6 @@ from core.async_bridge import run_sync # 模块级同步兼容接口用的同
from .api import ( from .api import (
NeteaseAPI, NeteaseAPI,
) )
from .qr import (
QRLoginManager,
)
# 向后兼容的函数接口 # 向后兼容的函数接口
@@ -21,108 +23,3 @@ def url_v1(song_id: int, level: str, cookies: dict[str, str]) -> dict[str, Any]:
"""获取歌曲URL(向后兼容)""" """获取歌曲URL(向后兼容)"""
api = NeteaseAPI() api = NeteaseAPI()
return run_sync(api.get_song_url(song_id, level, cookies)) return run_sync(api.get_song_url(song_id, level, cookies))
def name_v1(song_id: int) -> dict[str, Any]:
"""获取歌曲详情(向后兼容)"""
api = NeteaseAPI()
return run_sync(api.get_song_detail(song_id))
def lyric_v1(song_id: int, cookies: dict[str, str]) -> dict[str, Any]:
"""获取歌词(向后兼容)"""
api = NeteaseAPI()
return run_sync(api.get_lyric(song_id, cookies))
def search_music(keywords: str, cookies: dict[str, str], limit: int = 10,
search_type: int = 1, offset: int = 0) -> list[dict[str, Any]]:
"""搜索音乐(向后兼容)"""
api = NeteaseAPI()
return run_sync(api.search_music(keywords, cookies, limit, search_type, offset=offset))
def toplist_list() -> list[dict[str, Any]]:
"""获取官方榜单列表(向后兼容)"""
api = NeteaseAPI()
return run_sync(api.get_toplist())
def artist_songs(artist_id: int) -> dict[str, Any]:
"""获取歌手信息和热门歌曲(向后兼容)"""
api = NeteaseAPI()
return run_sync(api.get_artist_hot_songs(artist_id))
def song_comments(song_id: int, limit: int = 20, offset: int = 0) -> dict[str, Any]:
"""获取歌曲评论(向后兼容)"""
api = NeteaseAPI()
return run_sync(api.get_song_comments(song_id, limit, offset))
def account_info(cookies: dict[str, str]) -> dict[str, Any] | None:
"""获取当前账号信息(向后兼容)"""
api = NeteaseAPI()
return run_sync(api.get_account_info(cookies))
def user_playlists(user_id: int, cookies: dict[str, str]) -> list[dict[str, Any]]:
"""获取用户收藏/创建的歌单列表(向后兼容)"""
api = NeteaseAPI()
return run_sync(api.get_user_playlists(user_id, cookies))
def detect_vip_by_probe(cookies: dict[str, str], probe_song_id: int = 347230) -> dict[str, Any]:
"""通过歌曲URL接口探测账号会员类型(向后兼容)"""
api = NeteaseAPI()
return run_sync(api.detect_vip_by_probe(cookies, probe_song_id))
def playlist_subscribe(playlist_id: int, cookies: dict[str, str], action: int = 1) -> dict[str, Any]:
"""收藏/取消收藏歌单(向后兼容)"""
api = NeteaseAPI()
return run_sync(api.subscribe_playlist(playlist_id, cookies, action))
def album_subscribe(album_id: int, cookies: dict[str, str], action: int = 1) -> dict[str, Any]:
"""收藏/取消收藏专辑(向后兼容)"""
api = NeteaseAPI()
return run_sync(api.subscribe_album(album_id, cookies, action))
def post_comment(thread_id: str, content: str, action: int = 1,
comment_id: int | None = None,
cookies: dict[str, str] | None = None) -> dict[str, Any]:
"""发送/回复歌曲评论(向后兼容)"""
api = NeteaseAPI()
return run_sync(api.post_comment(thread_id, content, action, comment_id, cookies))
def probe_levels(cookies: dict[str, str], probe_song_id: int = 347230) -> list[str]:
"""实测账号可解析的音质列表(向后兼容)"""
api = NeteaseAPI()
return run_sync(api.probe_levels(cookies, probe_song_id))
def playlist_detail(playlist_id: int, cookies: dict[str, str]) -> dict[str, Any]:
"""获取歌单详情(向后兼容)"""
api = NeteaseAPI()
return run_sync(api.get_playlist_detail(playlist_id, cookies))
def album_detail(album_id: int, cookies: dict[str, str]) -> dict[str, Any]:
"""获取专辑详情(向后兼容)"""
api = NeteaseAPI()
return run_sync(api.get_album_detail(album_id, cookies))
def get_pic_url(pic_id: int | None, size: int = 300) -> str:
"""获取图片URL(向后兼容)"""
api = NeteaseAPI()
return api.get_pic_url(pic_id, size)
def qr_login() -> str | None:
"""二维码登录(向后兼容)"""
manager = QRLoginManager()
return run_sync(manager.qr_login())