fix(backend): approval.py + byod.py 改用 settings.create_redis_client() #5

Merged
simon merged 1 commits from fix/approval-redis-import into main 2026-08-09 23:12:12 +08:00
Owner

摘要

修复 PR #3 (commit 9292f41) 引入的回归:approval.py + byod.py 的 错误地从 导入 ,触发 ImportError,导致整个模块加载失败、相关路由全部 500

改用 自建连接(与 同款),符合全项目统一模式。

改动清单(2 files)

  • src/backend/app/api/approval.py — 删除 ,改为
  • src/backend/app/api/byod.py — 同样模式,预防性一并修复(避免 byod 模块首次被访问时再炸)

根因

是 内 函数的局部变量,永远不会出现在模块属性中。 是开发者对 lifespan 共享模式的误解(类似 才可能跨请求共享,但变量本身不可跨模块导入)。

PR #3 改用 重构时错误地假定 导出 ,但实际不存在该导出 → 路由层 在 FastAPI 启动时即抛 。

冒烟测试(生产已实测)

路由 结果
HTTP 200 (2276B)
HTTP 200
HTTP 200 (845B)
OK
OK

Backend 容器状态:( 后健康检查通过)。

部署轨迹

同类风险

本次扫描发现 14 个文件使用 (正确模式),仅 和 误用 —— 后两者已修复。

建议:未来重构 时应将正确实现移至 公共模块,避免再次误用。

提交

— fix(backend): approval.py + byod.py 改用 settings.create_redis_client()

父 commit: (main,未改写)

## 摘要 修复 PR #3 (commit 9292f41) 引入的回归:**approval.py + byod.py 的 错误地从 导入 ,触发 ImportError,导致整个模块加载失败、相关路由全部 500**。 改用 自建连接(与 同款),符合全项目统一模式。 ## 改动清单(2 files) - **src/backend/app/api/approval.py** — 删除 ,改为 - **src/backend/app/api/byod.py** — 同样模式,预防性一并修复(避免 byod 模块首次被访问时再炸) ## 根因 是 内 函数的**局部变量**,永远不会出现在模块属性中。 是开发者对 lifespan 共享模式的误解(类似 才可能跨请求共享,但变量本身不可跨模块导入)。 PR #3 改用 重构时错误地假定 导出 ,但实际不存在该导出 → 路由层 在 FastAPI 启动时即抛 。 ## 冒烟测试(生产已实测) | 路由 | 结果 | |---|---| | | ✅ HTTP 200 (2276B) | | | ✅ HTTP 200 | | | ✅ HTTP 200 (845B) | | | ✅ OK | | | ✅ OK | Backend 容器状态:( 后健康检查通过)。 ## 部署轨迹 ## 同类风险 本次扫描发现 **14 个文件**使用 (正确模式),仅 和 误用 —— 后两者已修复。 **建议**:未来重构 时应将正确实现移至 公共模块,避免再次误用。 ## 提交 — fix(backend): approval.py + byod.py 改用 settings.create_redis_client() **父 commit**: (main,未改写)
workbuddy-claude added 1 commit 2026-08-09 22:27:39 +08:00
PR #3 (commit 9292f41) 引入的回归:get_redis() 用 `from app.main import redis_client`,
但 redis_client 是 lifespan 函数内的局部变量,永远不可跨模块导入。

冒烟测试:ImportError: cannot import name 'redis_client' from 'app.main'
          → 整个 approval 模块加载失败,所有审批路由 500

修复:改用 settings.create_redis_client() 自建连接(与 approval_webhook.py:_writeback_agent_todo 同款)。

byod.py 同样问题,预防性一并修复(避免 byod 模块首次被访问时再炸)。

实测:
- POST /approval/callback → HTTP 200 {errcode:0}
- GET /byod/eligible-positions → HTTP 200 (845B)
simon merged commit d8e7dbe998 into main 2026-08-09 23:12:12 +08:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: simon/wecom_it_smart_desk#5