test(wave117): 抽离speed_config领域模型 + 57单测 #1008

Closed
xiaoxia wants to merge 1 commits from test/wave117-speed-config into develop
Owner

变更内容

  • 抽离 SpeedConfig 数据类、atempo 多级拆分算法、视频/音频滤镜构建、时长计算到 packages/domain/speed_config.py
  • speed_engine.py: 167→74 行 (-56%),保留 SpeedEngine 薄包装类 + 模块级向后兼容导入

单测

  • 新增 57 个纯逻辑单测(test_speed_config.py)
  • 原有 100 个测试无回归(test_speed_engine.py + test_speed_engine_pure.py)
  • 合计 157 passed
## 变更内容 - 抽离 SpeedConfig 数据类、atempo 多级拆分算法、视频/音频滤镜构建、时长计算到 packages/domain/speed_config.py - speed_engine.py: 167→74 行 (-56%),保留 SpeedEngine 薄包装类 + 模块级向后兼容导入 ## 单测 - 新增 57 个纯逻辑单测(test_speed_config.py) - 原有 100 个测试无回归(test_speed_engine.py + test_speed_engine_pure.py) - 合计 **157 passed**

🚀 预览环境已部署

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

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

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

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

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1008 | | 预览链接 | [https://pr-1008.preview.xiaoxiajianji.com](https://pr-1008.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
xiaoxia force-pushed test/wave117-speed-config from abf6052280 to 5162ffa29c 2026-07-27 12:49:43 +08:00 Compare
xiaoxia added 1 commit 2026-07-27 18:07:06 +08:00
test(wave117): 抽离speed_config领域模型 + 57单测
ACR Cleanup / ACR Image Cleanup (pull_request_target) Has been cancelled
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 15s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 39s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m35s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m27s
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 / Validate - Code Quality (pull_request) Failing after 2m56s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 2m30s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 7s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m0s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 3m21s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m2s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 3m40s
AI Code Review / AI Code Review (pull_request) Successful in 3m48s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 46m0s
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 / Unit Tests (pull_request) Successful in 6m19s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Failing after 0s
CI/CD Pipeline / CI Gate (pull_request) Failing after 1s
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
107f2264a7
- 抽离SpeedConfig数据类、atempo多级拆分、视频/音频滤镜构建、时长计算到packages/domain/speed_config.py
- speed_engine.py: 167→74行 (-56%),保留SpeedEngine薄包装类+模块级向后兼容导入
- 57个纯逻辑单测全绿,原有100个测试无回归
- 合计157 passed
xiaoxia force-pushed test/wave117-speed-config from 5162ffa29c to 107f2264a7 2026-07-27 18:07:06 +08:00 Compare
xiaoxia closed this pull request 2026-07-27 18:07:35 +08:00

🗑️ 预览环境已清理

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

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

🗑️ **预览环境已清理** PR #1008 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Collaborator

代码审查结果 - PR #1008

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

  1. apps/worker/video_processing/speed_engine.py 第70行resolve_clip_speed 方法移除了 @staticmethod 装饰器,破坏了向后兼容性。
    • 说明:PR 描述中明确提到“本模块保留薄包装层,确保向后兼容”。然而,resolve_clip_speed 方法在重构中丢失了 @staticmethod 装饰器,且保留了 self 参数。这将其从静态方法变为实例方法。如果外部代码通过 SpeedEngine.resolve_clip_speed(...)(不实例化类)进行调用,将会抛出 TypeError: missing 1 required positional argument: 'self',导致运行时错误。
    • 修改建议:在方法定义前恢复 @staticmethod 装饰器。

💡 建议(2个可选)

  1. packages/domain/speed_config.py 第76行:类型校验逻辑包含 bool 类型。

    • 说明:在 Python 中 boolint 的子类(isinstance(True, int) 为 True)。当前逻辑允许传入布尔值作为速度(True 会被转为 1.0False 会被转为 0.0 随后 clamp 为 1.0)。虽然不会导致程序崩溃,但在处理配置解析时,接受布尔值作为速度通常不是预期行为,属于类型校验不严谨。
    • 修改建议:在类型检查中增加对 bool 的排除,例如 if not isinstance(speed, (int, float)) or isinstance(speed, bool):
  2. apps/worker/video_processing/speed_engine.py 第70行:包装层方法签名与底层实现类型不一致。

    • 说明:包装层的 resolve_clip_speed 方法中,参数 clip_config 的类型注解为 dict,而其调用的底层实现 _resolve_clip_speed_base 支持 dict | None。虽然 Python 是动态语言,但这限制了包装层直接传入 None 的能力,与底层逻辑的宽容度不匹配。
    • 修改建议:将包装层的参数类型修改为 clip_config: Optional[dict],以保持接口一致性。

格式检查通过 | 逻辑审查需修改 | 性能良好


🤖 由 AI 代码审查机器人自动生成 | 2026-07-27 10:30:44 | 模型:

## 代码审查结果 - PR #1008 ### ⚠️ 问题(1个需要修改) 1. **apps/worker/video_processing/speed_engine.py 第70行**:`resolve_clip_speed` 方法移除了 `@staticmethod` 装饰器,破坏了向后兼容性。 - **说明**:PR 描述中明确提到“本模块保留薄包装层,确保向后兼容”。然而,`resolve_clip_speed` 方法在重构中丢失了 `@staticmethod` 装饰器,且保留了 `self` 参数。这将其从静态方法变为实例方法。如果外部代码通过 `SpeedEngine.resolve_clip_speed(...)`(不实例化类)进行调用,将会抛出 `TypeError: missing 1 required positional argument: 'self'`,导致运行时错误。 - **修改建议**:在方法定义前恢复 `@staticmethod` 装饰器。 ### 💡 建议(2个可选) 1. **packages/domain/speed_config.py 第76行**:类型校验逻辑包含 `bool` 类型。 - **说明**:在 Python 中 `bool` 是 `int` 的子类(`isinstance(True, int)` 为 True)。当前逻辑允许传入布尔值作为速度(`True` 会被转为 `1.0`,`False` 会被转为 `0.0` 随后 clamp 为 `1.0`)。虽然不会导致程序崩溃,但在处理配置解析时,接受布尔值作为速度通常不是预期行为,属于类型校验不严谨。 - **修改建议**:在类型检查中增加对 `bool` 的排除,例如 `if not isinstance(speed, (int, float)) or isinstance(speed, bool):`。 2. **apps/worker/video_processing/speed_engine.py 第70行**:包装层方法签名与底层实现类型不一致。 - **说明**:包装层的 `resolve_clip_speed` 方法中,参数 `clip_config` 的类型注解为 `dict`,而其调用的底层实现 `_resolve_clip_speed_base` 支持 `dict | None`。虽然 Python 是动态语言,但这限制了包装层直接传入 `None` 的能力,与底层逻辑的宽容度不匹配。 - **修改建议**:将包装层的参数类型修改为 `clip_config: Optional[dict]`,以保持接口一致性。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能良好 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-27 10:30:44 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
Some checks are pending
ACR Cleanup / ACR Image Cleanup (pull_request_target) Has been cancelled
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 15s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 39s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m35s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m27s
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 / Validate - Code Quality (pull_request) Failing after 2m56s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 2m30s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 7s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m0s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 3m21s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m2s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 3m40s
AI Code Review / AI Code Review (pull_request) Successful in 3m48s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 46m0s
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 / Unit Tests (pull_request) Successful in 6m19s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Failing after 0s
CI/CD Pipeline / CI Gate (pull_request) Failing after 1s
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

Pull request closed

Sign in to join this conversation.