refactor(test): 第106波 - video_concat领域模型抽离 + 53单测 #984

Closed
xiaoxia wants to merge 1 commits from test/wave106-video-concat-config into develop
Owner

变更内容:

  • 从 concat_engine.py 抽离 ConcatSegment/ConcatConfig/常量到 packages/domain/video_concat.py
  • concat_engine 保留全部导出,完全向后兼容
  • 新增 53 个纯逻辑单测,覆盖配置解析、边界校验、属性计算
  • concat_engine.py: 695→581 行 (-114行, -16%)

验证:

  • 原有 test_concat_engine 全绿 + test_video_concat 53 passed,合计 81 passed
## 变更内容: - 从 concat_engine.py 抽离 ConcatSegment/ConcatConfig/常量到 packages/domain/video_concat.py - concat_engine 保留全部导出,完全向后兼容 - 新增 53 个纯逻辑单测,覆盖配置解析、边界校验、属性计算 - concat_engine.py: 695→581 行 (-114行, -16%) ## 验证: - 原有 test_concat_engine 全绿 + test_video_concat 53 passed,合计 81 passed
xiaoxia added 1 commit 2026-07-26 22:40:50 +08:00
refactor(wave106): 抽离video_concat领域模型 + 53单测
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 5s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 47s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 1m22s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 53s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 35s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 21s
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 / PR Build Web Image (pull_request) Successful in 32s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 2m4s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 36s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 35s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m51s
AI Code Review / AI Code Review (pull_request) Successful in 5m13s
CI/CD Pipeline / Frontend Unit 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 Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m46s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 3m52s
CI/CD Pipeline / Deploy Production (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 / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
ACR Cleanup / ACR Image Cleanup (pull_request_target) Has been cancelled
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 24s
42b2d46757
- 从concat_engine.py抽离ConcatSegment/ConcatConfig/常量到packages/domain/video_concat.py
- concat_engine保留全部导出,完全向后兼容
- 新增53个纯逻辑单测,覆盖配置解析、边界校验、属性计算
- concat_engine.py: 695→581行 (-114行, -16%)

🚀 预览环境已部署

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

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

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

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

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

代码审查结果 - PR #984

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

  1. packages/domain/video_concat.py 第78行video_path 字段对 None 值处理不当,会导致逻辑误判。

    • 问题描述当输入字典中 video_path 显式为 None 时(如 {"video_path": None}),seg.get("video_path", "") 会取到 None,随后 str(None) 会被转换为字符串 "None"。该字符串非空,导致 is_valid 属性返回 True,后续处理时将使用错误的文件名 "None",导致路径校验失败或文件操作异常。
    • 修改建议:修改为 video_path=str(seg.get("video_path") or ""),确保 None 或空值都被转为空字符串。
  2. packages/domain/video_concat.py 第107行from_config_dict 未强制执行安全限制 MAX_CONCAT_SEGMENTS

    • 问题描述:代码定义了 MAX_CONCAT_SEGMENTS 常量用于防止 OOM,并提供了 clamp_segments 方法,但在工厂方法 from_config_dict 中并未调用该方法。如果外部调用者忘记手动调用 clamp_segments,传入大量片段将绕过安全限制,违背了常量定义的初衷。
    • 修改建议:在 from_config_dict 方法返回前调用 self.clamp_segments(),确保生成的对象始终符合安全约束。

💡 建议(2个可选)

  1. packages/domain/video_concat.py 第78行:建议对 video_path 进行去空格处理。

    • 具体内容:使用 .strip() 处理输入的路径字符串,防止传入 " " 这种由空格组成的无效路径通过 is_valid 检查(bool(" ") 为 True),导致后续逻辑报错。
  2. packages/domain/video_concat.py 第124行:建议捕获更具体的异常类型。

    • 具体内容:当前使用 except Exception 过于宽泛,可能会掩盖代码逻辑层面的其他错误(如 AttributeError)。建议改为捕获 (ValueError, TypeError, KeyError) 等与数据解析相关的具体异常。

格式检查通过 | 逻辑审查需修改 | 性能无明显问题


🤖 由 AI 代码审查机器人自动生成 | 2026-07-26 15:00:38 | 模型:

## 代码审查结果 - PR #984 ### ⚠️ 问题(2个需要修改) 1. **packages/domain/video_concat.py 第78行**:`video_path` 字段对 `None` 值处理不当,会导致逻辑误判。 - 问题描述当输入字典中 `video_path` 显式为 `None` 时(如 `{"video_path": None}`),`seg.get("video_path", "")` 会取到 `None`,随后 `str(None)` 会被转换为字符串 `"None"`。该字符串非空,导致 `is_valid` 属性返回 `True`,后续处理时将使用错误的文件名 `"None"`,导致路径校验失败或文件操作异常。 - 修改建议:修改为 `video_path=str(seg.get("video_path") or "")`,确保 `None` 或空值都被转为空字符串。 2. **packages/domain/video_concat.py 第107行**:`from_config_dict` 未强制执行安全限制 `MAX_CONCAT_SEGMENTS`。 - 问题描述:代码定义了 `MAX_CONCAT_SEGMENTS` 常量用于防止 OOM,并提供了 `clamp_segments` 方法,但在工厂方法 `from_config_dict` 中并未调用该方法。如果外部调用者忘记手动调用 `clamp_segments`,传入大量片段将绕过安全限制,违背了常量定义的初衷。 - 修改建议:在 `from_config_dict` 方法返回前调用 `self.clamp_segments()`,确保生成的对象始终符合安全约束。 ### 💡 建议(2个可选) 1. **packages/domain/video_concat.py 第78行**:建议对 `video_path` 进行去空格处理。 - 具体内容:使用 `.strip()` 处理输入的路径字符串,防止传入 `" "` 这种由空格组成的无效路径通过 `is_valid` 检查(`bool(" ")` 为 True),导致后续逻辑报错。 2. **packages/domain/video_concat.py 第124行**:建议捕获更具体的异常类型。 - 具体内容:当前使用 `except Exception` 过于宽泛,可能会掩盖代码逻辑层面的其他错误(如 `AttributeError`)。建议改为捕获 `(ValueError, TypeError, KeyError)` 等与数据解析相关的具体异常。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能无明显问题 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-26 15:00:38 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia closed this pull request 2026-07-27 15:26:15 +08:00

🗑️ 预览环境已清理

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

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

🗑️ **预览环境已清理** PR #984 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Some checks are pending
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 5s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 47s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 1m22s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 53s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 35s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 21s
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 / PR Build Web Image (pull_request) Successful in 32s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 2m4s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 36s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 35s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m51s
AI Code Review / AI Code Review (pull_request) Successful in 5m13s
CI/CD Pipeline / Frontend Unit 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 Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m46s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 3m52s
CI/CD Pipeline / Deploy Production (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 / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
ACR Cleanup / ACR Image Cleanup (pull_request_target) Has been cancelled
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 24s

Pull request closed

Sign in to join this conversation.