fix(quality): classification_status 赋枚举值而非裸字符串 + 仓储层防御 (#2079) #2080
Reference in New Issue
Block a user
Delete Branch "fix/quality-classification-status-enum"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
背景
#2079 队列分流 PR 合入后,跑 backfill_asset_quality 脚本时发现
calculate_asset_qualitytask 连续报'str' object has no attribute 'value'(400 条任务全部重试空转)。运维已止血(清空 transcode 队列 + restart worker)。根因(精确到行)
packages/domain/entities.py中Asset.classification_status类型为ClassificationStatus枚举(=ClassificationJobStatus的别名)packages/adapters/sqlalchemy_impl/asset_repository.py:172写库时执行model.classification_status = asset.classification_status.value,期望枚举apps/worker/worker_app/tasks/asset_quality_scoring_task.py:99写的是裸字符串asset.classification_status = "completed",update() 在 .value 处抛 AttributeError之前我在 PR #2072 合入时验证过
calculate_quality_score/classify_from_analysis返回枚举正常(那部分确实是修好的),但没覆盖到 task 自己给 classification_status 赋字符串这一段,是验证盲区。修复
(a) task 赋枚举值(主修复)
apps/worker/worker_app/tasks/asset_quality_scoring_task.pyfrom packages.domain.classification import ClassificationStatusasset.classification_status = "completed"→ClassificationStatus.COMPLETEDasset.classification_status = ClassificationStatus.FAILED,避免停留在 PENDING 被反复重试(b) 仓储层防御(兜底)
packages/adapters/sqlalchemy_impl/asset_repository.pycreate/update 中对
asset.status.value/asset.classification_status.value加 hasattr 防御:.value部署步骤
'str' object has no attribute 'value'报错,且 DB 中quality_score IS NOT NULL数量增长后,再全量跑:不做的事
🚀 预览环境已部署
🗑️ 预览环境已清理
PR #2080 已关闭或合并,对应的预览环境已被清理。