From ec9240b52acd4f8b14de9297e0dcec8fbf80ae0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=9A=E5=8A=A1=E6=9C=8D=E5=8A=A1=E5=99=A8=E8=BF=90?= =?UTF-8?q?=E7=BB=B4?= Date: Mon, 28 Sep 2026 14:46:44 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20=5Fstorage=5Fkey=20?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E5=86=99=E5=85=A5=20EditPlanClip=EF=BC=88slo?= =?UTF-8?q?ts=3DTrue=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit EditPlanClip 使用 @dataclass(slots=True),不允许 setattr 动态添加属性。 将 _storage_key 改为存储在 clip.config 字典中,所有读取处同步修改。 - render_adapter.py: c._storage_key = sk → c.config['_storage_key'] = sk - unified_render_service.py: getattr → config.get('_storage_key') - gpu_direct_pipeline.py: getattr → config.get('_storage_key') --- apps/worker/video_processing/gpu_direct_pipeline.py | 2 +- apps/worker/video_processing/render_adapter.py | 5 ++++- apps/worker/video_processing/unified_render_service.py | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/apps/worker/video_processing/gpu_direct_pipeline.py b/apps/worker/video_processing/gpu_direct_pipeline.py index 6f774da5e..051d63705 100644 --- a/apps/worker/video_processing/gpu_direct_pipeline.py +++ b/apps/worker/video_processing/gpu_direct_pipeline.py @@ -156,7 +156,7 @@ def build_direct_render( # 1. 视频输入(原始素材签名 URL) for i, clip in enumerate(resolved_clips): - sk = getattr(clip, "_storage_key", None) + sk = (getattr(clip, "config", None) or {}).get("_storage_key") if not sk: raise ValueError(f"clip {getattr(clip, 'clip_id', i)} missing _storage_key") fname = f"v{i}.mp4" diff --git a/apps/worker/video_processing/render_adapter.py b/apps/worker/video_processing/render_adapter.py index 2c11ee7ee..7007cd2a4 100755 --- a/apps/worker/video_processing/render_adapter.py +++ b/apps/worker/video_processing/render_adapter.py @@ -599,7 +599,10 @@ class RenderAdapter: for c in clips: sk = _storage_map.get(getattr(c, "asset_id", "")) if sk: - c._storage_key = sk + # EditPlanClip 使用 __slots__,不能 setattr,改存 config 字典 + if not isinstance(c.config, dict): + c.config = dict(c.config) if c.config else {} + c.config["_storage_key"] = sk result = render_svc.render() # 4.5 渲染后校验输出完整性 diff --git a/apps/worker/video_processing/unified_render_service.py b/apps/worker/video_processing/unified_render_service.py index f052ee053..35c816fe2 100755 --- a/apps/worker/video_processing/unified_render_service.py +++ b/apps/worker/video_processing/unified_render_service.py @@ -2247,7 +2247,7 @@ class UnifiedRenderService: cg = ColorGradeConfig.from_dict(cc.get("color_grade")) if cg.enabled and cg.has_effect(): return False - if not getattr(c, "_storage_key", None): + if not (c.config or {}).get("_storage_key"): return False return True except Exception: # noqa: BLE001