fix: 一键生成 P0 修复 + P1 校验 #203
Reference in New Issue
Block a user
Delete Branch "fix/oneclick-gen-p0-fixes"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
修复内容
P0-1: Worker 支持项目级素材下载
_download_library_assets支持双模式查询(asset_library_id / project_id)P0-2: OSS 上传失败不能静默忽略
P0-3: 排查 FFmpeg 渲染失败(exit code 183)
run_ffmpeg失败时完整 stderr 打到日志_execute_ffmpeg额外记录 filter_complex 便于诊断P1 顺手修
template_id存在性校验(不存在/已禁用 → ValueError)asset_ids归属校验(不属于指定项目/素材库 → ValueError)测试
P0-1: _download_library_assets 支持双模式查询(asset_library_id / project_id) 下载失败时抛出 RuntimeError,不再静默忽略 P0-2: OSS 上传失败抛异常 + 上传后 HEAD 校验 URL 可访问性 P0-3: run_ffmpeg 失败时完整 stderr 打到日志(排查 exit code 183) _execute_ffmpeg 额外记录 filter_complex 便于诊断 P1: template_id 存在性校验(不存在/已禁用 → ValueError) asset_ids 归属校验(不属于指定项目/素材库 → ValueError) 新增 16 个单元测试覆盖全部修复点,全量 1170 测试通过无回归✅ 审查结论:通过
PR #203 一键生成 P0 修复 — 代码审计报告
✅ 做得好的地方
1. P0-1 双模式查询逻辑清晰,边界处理完善
_download_library_assets支持素材库模式 / 项目级模式双路径,二选一校验到位RuntimeError,不再返回空列表静默继续asset_library_id=/project_id=),可读性大幅提升2. P0-2 OSS 异常处理彻底
_verify_url_accessibleHEAD 校验,上传后确认 URL 可访问,双重保险3. P0-3 FFmpeg 日志增强
_execute_ffmpeg额外记录 filter_complex,定位 exit code 183 更高效4. P1 校验位置正确
template_id存在性校验 +asset_ids归属校验都放在任务最开头,早失败早报错5. 测试覆盖全面
💡 P3 优化建议(不阻塞合并)
P3-1:部分素材下载失败时无明确反馈
apps/worker/worker_app/tasks/generation.py—_download_library_assetsasset_ids但只有部分下载成功时,只打 warning 就返回成功列表,调用方(及上层业务)不知道有素材缺失,最终生成的视频可能缺少用户预期的片段(success_paths, failed_ids)元组),或增加strict=True参数控制部分失败是否抛异常P3-2:三次数据库会话可合并
apps/worker/worker_app/tasks/generation.py_validate_template_exists+_validate_asset_ids_ownership+_download_library_assetsgenerate_video任务开头依次开 3 个独立 DB session,每次都建连/关闭,对于视频生成这种长任务影响不大,但可以优化P3-3:HEAD 校验无重试机制
apps/worker/worker_app/tasks/generation.py—_verify_url_accessible🔍 已验证项
_verify_url_accessible的 URL 为内部构造的 OSS 地址,用户不可控,风险低结论:通过,可合并。 3 个 P3 为后续优化项,不影响本次 P0 修复上线。
✅ PR #203 复审通过(P3 优化追加)
结论:通过 — 0 P0 / 0 P1 / 0 P2 / 1 P3
增量 commit:
ab413413(3 个文件,+461/-27)复审项逐一确认
P3-1 素材下载失败可感知(strict 模式) ✅
_download_library_assets新增strict: bool = True参数,默认严格模式——任何素材下载失败立即抛 RuntimeErrorP3-2 DB session 合并 ✅
_download_library_assets同一 DB sessiongenerate_video中_validate_asset_ids_ownership独立调用已移除P3-3 OSS HEAD 校验加重试 ✅
_verify_url_accessible新增retries: int = 2参数新增 15 个单元测试 ✅
🟡 P3 问题(1 项,非阻塞)
generation.py_validate_asset_ids_ownership函数已成为死代码——生产代码不再调用,仅测试文件引用。P3-2 合并后该函数应一并删除,避免维护冗余代码。其他说明
可以合并。死代码清理可顺手处理,也可留到下轮迭代。
🟡 PR #203 快速复审 — 死代码清理不完整
结论:需要修改(P3,不阻塞合并但建议修完再合)
commit
6d1f4da1标题写的是「删除 _validate_asset_ids_ownership 死代码函数」,commit message 也列了三项:但实际只做了第 2 项(删了 5 个测试用例),第 1 和第 3 项都没做:
generation.py_validate_asset_ids_ownership函数仍然存在,53 行死代码未删除generation.py更严重的是:测试删了但函数还在——等于把死代码的测试覆盖也弄丢了。虽然反正都是死代码影响不大,但清理方向反了。
建议:
_validate_asset_ids_ownership函数(第 489-542 行左右)整个删掉改完 CI 肯定还绿,不影响合并节奏。
✅ PR #203 复审通过(死代码清理补完)
结论:通过 — 0 P0 / 0 P1 / 0 P2 / 0 P3
commit
ad5036c9补完了上轮遗漏的清理:_validate_asset_ids_ownership函数(52 行死代码)已完整删除PR #203 整体状态:
可以合并了。