Archived
为什么:podcast_api.py(560 行) 与 qr_login.py(397 行) 既不属于任何包、也不是 入口脚本,却同时被 services 层与 web 层引用——`services/downloads.py` 直接 `from qr_login import ...`、`services/podcast.py` 直接 `import podcast_api`, 业务层反向依赖顶层游离模块,是本次架构体检里唯一的无争议分层倒置。 两者本就依赖 music_api(前者取 url_v1/APIConstants/APIException,后者取 QRLoginManager),与 music_api 下已有的 qr.py / compat.py 是同一层的同类物。 迁移(git 保留重命名历史): - podcast_api.py -> music_api/podcast.py - qr_login.py -> music_api/qr_client.py **命名避让**:不叫 music_api/qr_login.py——music_api/__init__ 已经从 .compat 导出了一个**同名函数** qr_login,同名子模块会与之互相遮蔽。改叫 qr_client (其核心导出即 QRLoginClient),并在验证里专门确认 music_api.qr_login 仍是 可调用函数、music_api.podcast 是模块,两者不冲突。 内部导入顺带改为精确子模块,不再绕道包门面: - podcast.py:from music_api import APIConstants/APIException/url_v1 → from .compat import url_v1 / from .constants import ... / from .errors import ... - qr_client.py:删掉那层 try/except ImportError 包装(它给的是「请确保 music_api.py 文件存在」这类顶层脚本时代的提示,作为包内模块已无意义), 改 from .cookies/.errors/.qr 相对导入 - CLI 用法文本 python qr_login.py → python -m music_api.qr_client (相对导入后直接跑脚本会失败,必须走 -m;全仓确认无脚本/文档引用旧入口) - 路径安全性已核对:qr_client 用的是 CWD 相对的 cookie.txt,不是 __file__ 相对, 迁移不改其解析结果 引用点全部更新(AST 扫描确认覆盖全集,替换后残留 0): - podcast:services/podcast.py(1 + 5 处调用) · web/routers/podcast.py(1 + 6) · web/routers/download.py(2 处函数内 + 3),导入名统一为 `podcast` - qr_login:services/downloads.py · web/routers/admin.py · web/routers/user.py(×2) - services/__init__.py 依赖自检列表去掉这两个名字(已并入 music_api) - pyproject include 去掉两个顶层文件名(music_api 目录已覆盖) 验证: - 11 + 3 个符号在新位置全部 hasattr 通过;podcast_api / qr_login 已 ModuleNotFoundError;6 个调用方模块均可 import;services 依赖自检仍生效 - 门禁:ruff 0 · pyright 0 errors/0 warnings · pytest 184 passed - 真实 uvicorn 冒烟 10/10,含 /podcast/parse 与 /podcast/hot 返回 401 (模块导入失败会是 500,路由缺失会是 404,401 证明两者都正常) - 生产 data/ 指纹 before == after
45 lines
1.1 KiB
Plaintext
45 lines
1.1 KiB
Plaintext
# 构建镜像严禁带入的敏感/私有/无关内容
|
|
LICENSE
|
|
README.md
|
|
.gitignore
|
|
.git/
|
|
__pycache__/
|
|
*.pyc
|
|
.env
|
|
downloads/
|
|
*.part
|
|
release/
|
|
release.zip
|
|
tests/
|
|
_smoke_test_downloader.py
|
|
_test_podcast_api.py
|
|
部署文档.md
|
|
功能介绍.md
|
|
# 真实凭据、用户数据库、密钥、日志、交接文档、运维脚本与审查工作目录
|
|
cookie.txt
|
|
user_cookie.txt
|
|
# Cookie 备份(music_api.qr_client._backup_cookie 产生,含真实 MUSIC_U):
|
|
# 原模式 *.cookie.backup.* 与实际文件名 cookie.backup.*.txt 不匹配,排除形同虚设
|
|
cookie.*.txt
|
|
user_cookie.*.txt
|
|
data/
|
|
data/backups/
|
|
*.log
|
|
# 轮转件 music_api.log.1/2/3 不匹配 *.log——含 IP/UA 的历史日志
|
|
# 曾随 _mkpkg 同类问题外泄,docker 轨道同步堵上
|
|
music_api.log*
|
|
*.log.*
|
|
交接文档.md
|
|
修复验收台账_F01-F117.md
|
|
待修问题清单_三轮汇总.md
|
|
# 补齐后产生的审计清单与内部引导文件(含内部路径/运维细节)
|
|
待修问题清单_第四轮深挖.md
|
|
待修问题清单_第五轮深挖.md
|
|
新会话引导.md
|
|
_pkg_ok.txt
|
|
_css_ok.txt
|
|
.zcode/
|
|
云村小助手-网站开关.bat
|
|
_audit_work/
|
|
venv/
|