From 5eedf190c1eae4802734cd28363e96ec3a85ac04 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Sun, 4 Oct 2026 17:25:42 +0800 Subject: [PATCH] =?UTF-8?q?fix(viral-video):=20pre=5Ftrusted=5Fimages=20to?= =?UTF-8?q?=5Fdomain=20=E5=85=BC=E5=AE=B9=E8=84=8F=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit list() 对字符串逐字符拆分导致 pre_trusted_images 被读成 ['n','u','l','l']。 修复: 1. str 类型 → json.loads 解析为 list 2. list 类型 → 过滤长度≤5的短字符串元素(过滤字符拆分脏数据) 3. None/解析失败 → 返回 None 同时 _to_response 和 schema 已在 #2178 补 pre_trusted_images 字段。 Ref: #2175 --- .../sqlalchemy_impl/viral_video_repository.py | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/packages/adapters/sqlalchemy_impl/viral_video_repository.py b/packages/adapters/sqlalchemy_impl/viral_video_repository.py index fdcf03386..6b6755578 100755 --- a/packages/adapters/sqlalchemy_impl/viral_video_repository.py +++ b/packages/adapters/sqlalchemy_impl/viral_video_repository.py @@ -12,16 +12,26 @@ from packages.domain.viral_video import ViralVideoJob, ViralVideoStatus def _to_domain(model: ViralVideoJobModel) -> ViralVideoJob: - """ORM → 领域实体。""" + """ORM → 领域实体。pre_trusted_images 兼容脏数据:双序列化字符串/字符数组/list[str]。""" + import json as _pti_json + _raw_pti = getattr(model, "pre_trusted_images", None) + _pti: list[str] | None = None + if _raw_pti is not None: + if isinstance(_raw_pti, str): + try: + _p = _pti_json.loads(_raw_pti) + if isinstance(_p, list): + _pti = [u for u in _p if isinstance(u, str) and u] or None + except Exception: + _pti = None + elif isinstance(_raw_pti, list): + _f = [u for u in _raw_pti if isinstance(u, str) and len(u) > 5] + _pti = _f if _f else None return ViralVideoJob( id=model.id, user_id=model.user_id, images=list(model.images or []), - pre_trusted_images=( - list(getattr(model, "pre_trusted_images", None) or []) - if getattr(model, "pre_trusted_images", None) is not None - else None - ), + pre_trusted_images=_pti, industry=model.industry or "", target_customer=model.target_customer or "", persona_id=model.persona_id or "",