test(wave105): extract render_layer_utils domain module + 65 unit tests #983

Closed
xiaoxia wants to merge 1 commits from test/wave105-render-layer-utils into develop
Owner

从 unified_render_service.py 抽出渲染图层纯逻辑工具模块 render_layer_utils

变更内容

  • 新增 packages/domain/render_layer_utils.py(241行)
    • resolve_layer_role / get_layer_z_index: 图层角色解析
    • clip_effective_duration / clip_playback_speed / clip_adjusted_duration: 时长计算
    • estimate_total_duration: 总时长估算(主图层 + 转场重叠)
    • can_pass_through: 直通优化路径判断
    • LAYER_Z_INDEX / MAIN_LAYER_ROLES / PIP_DEFAULT_SCALE 常量
  • 修改 unified_render_service.py:1985→1947行(-38行)
    • 模块级 _resolve_layer_role + _LAYER_Z_INDEX 委托到新模块
    • 类静态方法 _clip_effective_duration/_clip_speed/_clip_adjusted_duration 委托到新模块
    • _estimate_total_duration 内部改用新模块函数
    • 完全向后兼容:所有原有 API 保持不变

测试

  • 新增 65 个单测(全覆盖 + 边界 + 往返一致性)
  • 原有 23 个 unified_render 测试全部通过
  • 全套 render 相关 373 passed
从 unified_render_service.py 抽出渲染图层纯逻辑工具模块 `render_layer_utils` ### 变更内容 - **新增** `packages/domain/render_layer_utils.py`(241行) - `resolve_layer_role` / `get_layer_z_index`: 图层角色解析 - `clip_effective_duration` / `clip_playback_speed` / `clip_adjusted_duration`: 时长计算 - `estimate_total_duration`: 总时长估算(主图层 + 转场重叠) - `can_pass_through`: 直通优化路径判断 - `LAYER_Z_INDEX` / `MAIN_LAYER_ROLES` / `PIP_DEFAULT_SCALE` 常量 - **修改** `unified_render_service.py`:1985→1947行(-38行) - 模块级 `_resolve_layer_role` + `_LAYER_Z_INDEX` 委托到新模块 - 类静态方法 `_clip_effective_duration/_clip_speed/_clip_adjusted_duration` 委托到新模块 - `_estimate_total_duration` 内部改用新模块函数 - **完全向后兼容**:所有原有 API 保持不变 ### 测试 - 新增 65 个单测(全覆盖 + 边界 + 往返一致性) - 原有 23 个 unified_render 测试全部通过 - 全套 render 相关 373 passed
xiaoxia added 1 commit 2026-07-26 22:19:49 +08:00
test(wave105): extract render_layer_utils domain module + 65 unit tests
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 22s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 37s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m10s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 54s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 24s
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 / PR Build Web Image (pull_request) Successful in 30s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 1m51s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 49s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 46s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 2m13s
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
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m1s
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 / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
AI Code Review / AI Code Review (pull_request) Successful in 3m36s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m56s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 2m20s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Has been cancelled
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 24s
8f99774620
从 unified_render_service.py (1985→1947行) 抽出渲染图层纯逻辑工具:
- resolve_layer_role / get_layer_z_index: 图层角色解析
- clip_effective_duration / clip_playback_speed / clip_adjusted_duration: 时长计算
- estimate_total_duration: 总时长估算
- can_pass_through: 直通路径判断
- LAYER_Z_INDEX / MAIN_LAYER_ROLES 等常量

保留向后兼容: 模块级函数 + 类静态方法均委托到新模块
验证: 88 passed (23原有 + 65新增),全套render 373 passed

🚀 预览环境已部署

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

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

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

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

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

代码审查结果 - PR #983

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

💡 建议(2个可选)

  1. packages/domain/render_layer_utils.py 第61行resolve_layer_role 函数中 role 的赋值逻辑冗余。

    • 代码:role = (config or {}).get("role", "") if config else ""
    • 说明:if config else "" 部分是多余的。如果 configNone(config or {}) 会返回空字典,其 .get 方法默认也会返回空字符串 ""
    • 建议:简化为 role = (config or {}).get("role", "") 即可,逻辑等价且更清晰。
  2. packages/domain/render_layer_utils.py 第113行:建议使用 ProtocolTypedDict 替代 Any 类型。

    • 说明:当前函数签名使用 layers: list[Any] 并依赖 getattr 动态获取属性,这降低了类型提示的有效性,IDE 无法提供自动补全和静态检查。
    • 建议:定义 LayerClip 的 Protocol 接口(包含 role, clips, duration 等属性),将 list[Any] 改为 list[LayerProtocol],以提高代码的可维护性和健壮性。

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


🤖 由 AI 代码审查机器人自动生成 | 2026-07-26 14:25:12 | 模型:

## 代码审查结果 - PR #983 ### ⚠️ 问题(0个需要修改) 无 ### 💡 建议(2个可选) 1. **packages/domain/render_layer_utils.py 第61行**:`resolve_layer_role` 函数中 `role` 的赋值逻辑冗余。 - 代码:`role = (config or {}).get("role", "") if config else ""` - 说明:`if config else ""` 部分是多余的。如果 `config` 为 `None`,`(config or {})` 会返回空字典,其 `.get` 方法默认也会返回空字符串 `""`。 - 建议:简化为 `role = (config or {}).get("role", "")` 即可,逻辑等价且更清晰。 2. **packages/domain/render_layer_utils.py 第113行**:建议使用 `Protocol` 或 `TypedDict` 替代 `Any` 类型。 - 说明:当前函数签名使用 `layers: list[Any]` 并依赖 `getattr` 动态获取属性,这降低了类型提示的有效性,IDE 无法提供自动补全和静态检查。 - 建议:定义 `Layer` 和 `Clip` 的 Protocol 接口(包含 `role`, `clips`, `duration` 等属性),将 `list[Any]` 改为 `list[LayerProtocol]`,以提高代码的可维护性和健壮性。 --- ✅ 格式检查通过 | ✅ 逻辑审查需修改 | ✅ 建议关注性能 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-26 14:25:12 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia closed this pull request 2026-07-27 15:26:14 +08:00

🗑️ 预览环境已清理

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

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

🗑️ **预览环境已清理** PR #983 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Some checks are pending
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 22s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 37s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m10s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 54s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 24s
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 / PR Build Web Image (pull_request) Successful in 30s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 1m51s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 49s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 46s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 2m13s
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
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m1s
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 / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
AI Code Review / AI Code Review (pull_request) Successful in 3m36s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m56s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 2m20s
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.