大量修改二期功能清单内容
This commit is contained in:
@@ -59,11 +59,16 @@ def get_or_create_team_group(team) -> AssetReviewGroup:
|
||||
return grp
|
||||
|
||||
|
||||
def submit_asset_for_review(asset: Asset) -> bool:
|
||||
def submit_asset_for_review(asset: Asset, *, force: bool = False) -> bool:
|
||||
"""真人资产送审:建组(若无)→ 传素材 → 标 processing。出错只记日志,不抛。
|
||||
返回是否真正进入审核(True=已标 processing;False=未送审/未配置/失败),
|
||||
供手动兜底端点据此如实回报,避免前端把「没送出去」误显示成「审核中」。"""
|
||||
if not assets_client.is_enabled() or asset.category not in Asset.REVIEW_CATEGORIES:
|
||||
供手动兜底端点据此如实回报,避免前端把「没送出去」误显示成「审核中」。
|
||||
|
||||
force=True 跳过 REVIEW_CATEGORIES 白名单:用户上传的资产被拿去当生成参考时,
|
||||
我们无从判断里面有没有真人脸,一律登记一次(与人物素材库上传同策略)。"""
|
||||
if not assets_client.is_enabled():
|
||||
return False
|
||||
if not force and asset.category not in Asset.REVIEW_CATEGORIES:
|
||||
return False
|
||||
url = _asset_url(asset)
|
||||
if not url:
|
||||
@@ -85,6 +90,32 @@ def submit_asset_for_review(asset: Asset) -> bool:
|
||||
return False
|
||||
|
||||
|
||||
# 平台自己生成的资产,提示词与生成链路都在我们手里,视为免审;用户上传的必须真过一遍审核。
|
||||
# 判据是 Asset.source 而不是「在不在某个库里」—— 按库免审等于把审核架空:
|
||||
# 用户上传一张图进资产库,再从自由创作引用出去,就绕过了整套人像审核。
|
||||
SELF_TRUSTED_SOURCES = (Asset.Source.AI_GENERATED, Asset.Source.SYSTEM)
|
||||
|
||||
|
||||
def reference_review_state(asset: Asset) -> str:
|
||||
"""引用一个平台资产(自由创作 @引用三库)前的审核判定。
|
||||
|
||||
返回 allowed / processing / failed / unsubmitted 四态之一,由调用方决定放行还是给提示。
|
||||
未送审(unsubmitted)不代表拒绝到底 —— 调用方应顺手送一次审,让用户等一会儿再来。
|
||||
"""
|
||||
if not assets_client.is_enabled():
|
||||
# 审核整套机制没配置时不能拿它拦人,否则一关审核全平台引用都用不了
|
||||
return "allowed"
|
||||
if asset.source in SELF_TRUSTED_SOURCES:
|
||||
return "allowed"
|
||||
if asset.review_status == "active":
|
||||
return "allowed"
|
||||
if asset.review_status == "processing":
|
||||
return "processing"
|
||||
if asset.review_status == "failed":
|
||||
return "failed"
|
||||
return "unsubmitted"
|
||||
|
||||
|
||||
def poll_asset_review(asset: Asset) -> str:
|
||||
"""查单个真人资产审核状态并更新 review_status。返回最新状态。
|
||||
只在状态变化时落库(保留 updated_at 作为「进入 processing 的时刻」);processing 超时兜底为 failed。"""
|
||||
|
||||
@@ -853,7 +853,7 @@ class SubmitReviewTests(TestCase):
|
||||
|
||||
def test_submit_review_200_when_started(self):
|
||||
"""真正进入审核(processing)→ 200 + 真态,供前端落 processing。"""
|
||||
def _mark_processing(asset):
|
||||
def _mark_processing(asset, *, force=False):
|
||||
asset.review_status = "processing"
|
||||
asset.save(update_fields=["review_status"])
|
||||
return True
|
||||
|
||||
@@ -265,13 +265,18 @@ class AssetViewSet(TeamScopedViewSetMixin, ModelViewSet):
|
||||
@action(detail=True, methods=["post"], url_path="submit-review")
|
||||
def submit_review(self, request, pk=None):
|
||||
"""手动兜底:把单个送审类素材(角色/三视图/分镜)送火山审核 —— 用户点灰盾「待审核」时触发。
|
||||
正常走 on_commit 自动送审;此口给万一漏提交时补提交。非送审类拒绝。"""
|
||||
正常走 on_commit 自动送审;此口给万一漏提交时补提交。非送审类拒绝。
|
||||
|
||||
for_reference=true:素材要被拿去当生成参考(自由创作 @引用三库)。此时不再看类目白名单——
|
||||
白名单只是「别为无关素材白跑一趟审核」的优化,而参考素材里有没有真人脸我们无从判断,
|
||||
一律登记一次。放宽的是送审范围,不是放行范围,不会削弱审核。"""
|
||||
from apps.assets.review import submit_asset_for_review
|
||||
|
||||
asset = self.get_object() # team-scoped + is_deleted 过滤
|
||||
if asset.category not in Asset.REVIEW_CATEGORIES:
|
||||
for_reference = bool(request.data.get("for_reference"))
|
||||
if not for_reference and asset.category not in Asset.REVIEW_CATEGORIES:
|
||||
return Response({"detail": "该素材无需审核"}, status=status.HTTP_400_BAD_REQUEST)
|
||||
started = submit_asset_for_review(asset)
|
||||
started = submit_asset_for_review(asset, force=for_reference)
|
||||
asset.refresh_from_db()
|
||||
# 没真正送出去(审核服务未启用/未配置 SDK/火山未回 Id/调用异常),且素材也不是已终态:
|
||||
# 如实回报 503,别返回空 review_status —— 否则前端会把「没送出去」误显示成「审核中」,刷新就打回原形。
|
||||
|
||||
Reference in New Issue
Block a user