添加审核 优化
Deploy dev / deploy (push) Successful in 1m2s

This commit is contained in:
Azmat@qq.com
2026-09-24 18:25:15 +08:00
parent 5dbb240b59
commit a84431c9c5
10 changed files with 334 additions and 48 deletions
+6 -1
View File
@@ -193,15 +193,20 @@ def _guard_asset_reference(asset: Asset, label: str, ref_type: str = "") -> None
if state == "allowed":
return
name = label or asset.name or "未命名"
if state == "unavailable":
raise ValueError(f"素材「{name}」审核服务暂不可用,请稍后再试")
if state == "failed":
raise ValueError(f"素材「{name}」未通过审核,不能用作生成参考")
# unsubmitted / 仍 processing:补送并短等,通过则放行
waited = wait_upload_review(asset, timeout_s=20.0)
if waited in ("active", "allowed"):
if waited == "active":
return
if waited == "failed":
err = (asset.review_error or "").strip()
raise ValueError(f"素材「{name}」未通过审核,不能用作生成参考" + (f"{err}" if err else ""))
if waited == "unavailable":
err = (asset.review_error or "").strip()
raise ValueError(f"素材「{name}」审核服务暂不可用,请稍后再试" + (f"{err}" if err else ""))
raise ValueError(f"素材「{name}」还在审核中,请稍后再试")
@@ -38,7 +38,7 @@ def _asset(team, *, source, review_status="", review_remote_id="", category=Asse
class ReferenceReviewStateTests(TestCase):
"""审核判定四态。审核服务开着时才生效,关着一律放行(不能拿没配置的机制拦人)"""
"""审核判定四态。平台生成素材可免责,用户上传绝不能因审核停用而放行"""
def setUp(self):
self.user = User.objects.create_user(username="refowner", password="p")
@@ -83,9 +83,9 @@ class ReferenceReviewStateTests(TestCase):
asset.save(update_fields=["in_library"])
self.assertEqual(reference_review_state(asset), "unsubmitted")
def test_review_disabled_lets_everything_through(self):
def test_review_disabled_still_blocks_uploaded_asset(self):
patch("apps.assets.assets_client.is_enabled", return_value=False).start()
self.assertEqual(reference_review_state(_asset(self.team, source=Asset.Source.UPLOAD)), "allowed")
self.assertEqual(reference_review_state(_asset(self.team, source=Asset.Source.UPLOAD)), "unavailable")
class VideoSeedRangeTests(TestCase):
+14 -2
View File
@@ -1715,8 +1715,14 @@ class FreeVideoUploadView(APIView):
thumb_url = storage.public_url(object_key=poster_key)
# 上传即送审:通过后再入库并返回链接,避免出片时才把「已提交审核」塞进对话。
from apps.assets import assets_client
from apps.assets.review import wait_upload_review
if not assets_client.is_enabled():
return Response(
{"detail": "素材审核服务暂不可用,请稍后重试", "review_status": "unavailable", "asset_id": str(asset.id)},
status=status.HTTP_503_SERVICE_UNAVAILABLE,
)
review_status = wait_upload_review(asset)
asset.refresh_from_db()
if review_status == "failed":
@@ -1727,7 +1733,13 @@ class FreeVideoUploadView(APIView):
{"detail": "素材还在审核中,请稍后再试", "review_status": "processing", "asset_id": str(asset.id)},
status=status.HTTP_408_REQUEST_TIMEOUT,
)
# active / allowed:进库,可供引用
if review_status != "active":
detail = (asset.review_error or "素材审核服务暂不可用,请稍后重试").strip()
return Response(
{"detail": detail, "review_status": "unavailable", "asset_id": str(asset.id)},
status=status.HTTP_503_SERVICE_UNAVAILABLE,
)
# active:进库,可供引用
if not asset.in_library:
asset.in_library = True
asset.save(update_fields=["in_library", "updated_at"])
@@ -1742,7 +1754,7 @@ class FreeVideoUploadView(APIView):
"width": width,
"height": height,
"thumb_url": thumb_url or (url if kind == "image" else ""),
"review_status": "active" if review_status in ("active", "allowed") else review_status,
"review_status": "active",
"in_library": True,
},
status=status.HTTP_201_CREATED,