test(wave122): 抽离trim_config领域模型 + 51单测 #1025

Closed
xiaoxia wants to merge 0 commits from test/wave122-trim-config into develop
Owner

变更内容

  • 抽离 TrimConfig/TrimSegment 纯逻辑到 packages/domain/trim_config.py
  • 三选二推导(start/end/duration)+ 边界钳制 + 有效性判断全覆盖
  • trim_engine.py 保留薄包装层 + FFmpeg 滤镜构建,向后兼容
  • 新增 51 个单测,原有 55 个 trim 测试无回归

验证

  • 本地全绿:106 passed(55原有 + 51新增)
  • 向后兼容:所有旧导出均保留
## 变更内容 - 抽离 TrimConfig/TrimSegment 纯逻辑到 `packages/domain/trim_config.py` - 三选二推导(start/end/duration)+ 边界钳制 + 有效性判断全覆盖 - trim_engine.py 保留薄包装层 + FFmpeg 滤镜构建,向后兼容 - 新增 51 个单测,原有 55 个 trim 测试无回归 ## 验证 - 本地全绿:106 passed(55原有 + 51新增) - 向后兼容:所有旧导出均保留

🚀 预览环境已部署

项目 详情
PR号 #1025
预览链接 https://pr-1025.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1025 | | 预览链接 | [https://pr-1025.preview.xiaoxiajianji.com](https://pr-1025.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
Collaborator

代码审查结果 - PR #1025

⚠️ 问题(1个需要修改)

  1. apps/worker/video_processing/trim_engine.py 第42-44行:使用 or 运算符合并字段值存在逻辑漏洞。
    • 问题描述:代码使用 config.get("trim_start") or config.get("start_time") or 0 来获取配置。由于 00.0 在 Python 中为假值,如果 trim_start 显式设置为 0(表示从开头裁剪),而 start_time 恰好存在或为非零值,trim_start 会被错误地忽略。同样,如果两者都为 0,最终结果依赖于 or 链的末尾,虽然结果可能正确,但逻辑上混淆了“字段缺失”与“字段值为0”的区别。
    • 后果:在特定配置组合下(如同时存在旧字段和新字段,且旧字段值为0),会导致裁剪参数解析错误,改变了用户的裁剪意图。
    • 修改建议:应使用 in 操作符检查键是否存在,或使用 dict.get(key, default) 的嵌套形式,避免依赖值的真值判断。
      # 建议修改为:
      start = config.get("start_time", config.get("trim_start", 0))
      # 或者更严谨地处理优先级:
      if "start_time" in config:
          start = config["start_time"]
      else:
          start = config.get("trim_start", 0)
      

💡 建议(1个可选)

  1. packages/domain/xfade_builder.py 第170行:循环内重复计算 sum(clip_durations) 存在性能隐患。
    • 问题描述:在 for 循环中,sum(clip_durations) 被重复调用。如果 clip_durations 列表较长,这将导致算法复杂度从 O(N) 上升到 O(N^2)。
    • 修改建议:在循环开始前计算一次总时长并赋值给变量,循环中直接使用该变量。

格式检查通过 | 逻辑审查需修改 | ⚠️ 建议关注性能


🤖 由 AI 代码审查机器人自动生成 | 2026-07-27 08:04:00 | 模型:

## 代码审查结果 - PR #1025 ### ⚠️ 问题(1个需要修改) 1. **apps/worker/video_processing/trim_engine.py 第42-44行**:使用 `or` 运算符合并字段值存在逻辑漏洞。 - **问题描述**:代码使用 `config.get("trim_start") or config.get("start_time") or 0` 来获取配置。由于 `0` 和 `0.0` 在 Python 中为假值,如果 `trim_start` 显式设置为 `0`(表示从开头裁剪),而 `start_time` 恰好存在或为非零值,`trim_start` 会被错误地忽略。同样,如果两者都为 `0`,最终结果依赖于 `or` 链的末尾,虽然结果可能正确,但逻辑上混淆了“字段缺失”与“字段值为0”的区别。 - **后果**:在特定配置组合下(如同时存在旧字段和新字段,且旧字段值为0),会导致裁剪参数解析错误,改变了用户的裁剪意图。 - **修改建议**:应使用 `in` 操作符检查键是否存在,或使用 `dict.get(key, default)` 的嵌套形式,避免依赖值的真值判断。 ```python # 建议修改为: start = config.get("start_time", config.get("trim_start", 0)) # 或者更严谨地处理优先级: if "start_time" in config: start = config["start_time"] else: start = config.get("trim_start", 0) ``` ### 💡 建议(1个可选) 1. **packages/domain/xfade_builder.py 第170行**:循环内重复计算 `sum(clip_durations)` 存在性能隐患。 - **问题描述**:在 `for` 循环中,`sum(clip_durations)` 被重复调用。如果 `clip_durations` 列表较长,这将导致算法复杂度从 O(N) 上升到 O(N^2)。 - **修改建议**:在循环开始前计算一次总时长并赋值给变量,循环中直接使用该变量。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ⚠️ 建议关注性能 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-27 08:04:00 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia force-pushed test/wave122-trim-config from 33b2faf795 to 5289e427e2 2026-07-27 18:17:28 +08:00 Compare
xiaoxia closed this pull request 2026-07-27 19:50:56 +08:00

🗑️ 预览环境已清理

PR #1025 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #1025 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Some checks are pending
CI/CD Pipeline / Check if frontend-only change (push) Has been cancelled
CI/CD Pipeline / Validate - Code Quality (push) Has been cancelled
CI/CD Pipeline / Validate - Type Check (mypy) (push) Has been cancelled
CI/CD Pipeline / Validate - Migration (alembic) (push) Has been cancelled
CI/CD Pipeline / Unit Tests (push) Has been cancelled
CI/CD Pipeline / Integration Tests (push) Has been cancelled
CI/CD Pipeline / Frontend Lint (push) Has been cancelled
CI/CD Pipeline / Frontend Unit Tests (push) Has been cancelled
CI/CD Pipeline / PR Build API Image (push) Has been cancelled
CI/CD Pipeline / PR Build Web Image (push) Has been cancelled
CI/CD Pipeline / PR Build Worker Image (push) Has been cancelled
CI/CD Pipeline / Build Staging API Image (push) Has been cancelled
CI/CD Pipeline / Build Staging Web Image (push) Has been cancelled
CI/CD Pipeline / Build Staging Worker Image (push) Has been cancelled
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Has been cancelled
CI/CD Pipeline / Staging E2E Tests (push) Has been cancelled
CI/CD Pipeline / Staging API Integration Tests (push) Has been cancelled
CI/CD Pipeline / Build Production API Image (push) Has been cancelled
CI/CD Pipeline / Build Production Web Image (push) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (push) Has been cancelled
CI/CD Pipeline / Deploy Production (push) Has been cancelled
CI/CD Pipeline / Production Browser E2E (push) Has been cancelled
CI/CD Pipeline / ACR Image Cleanup (push) Has been cancelled
CI/CD Pipeline / Canary Release to Production (push) Has been cancelled
CI/CD Pipeline / CI Gate (push) Has been cancelled
AI Code Review / AI Code Review (pull_request) Failing after 0s
PR Automation / Auto Approve on CI Green (pull_request) Failing after 0s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Failing after 0s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Failing after 0s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m33s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 48s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Failing after 1s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 0s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Failing after 1s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Failing after 0s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 0s
CI/CD Pipeline / Integration Tests (pull_request) Failing after 0s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 0s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 0s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 10m44s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m58s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m54s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Failing after 0s

Pull request closed

Sign in to join this conversation.