完成视频复刻和优化
This commit is contained in:
@@ -328,11 +328,23 @@ class AdminAssetReviewTests(TestCase):
|
||||
mock_submit.assert_not_called()
|
||||
|
||||
def test_poll_only_processing(self):
|
||||
with patch("apps.adminpanel.views.poll_asset_review", return_value="active") as mock_poll:
|
||||
with patch("apps.assets.review.submit_asset_for_review", return_value=False), patch(
|
||||
"apps.assets.review.poll_asset_review", return_value="active"
|
||||
) as mock_poll:
|
||||
r = self.ac.post("/api/admin/asset-reviews/poll/", {}, format="json")
|
||||
self.assertEqual(r.status_code, 200)
|
||||
self.assertEqual(r.data["polled"], 1) # 仅 a_proc 处于 processing
|
||||
mock_poll.assert_called_once()
|
||||
self.assertEqual(r.data.get("submitted", 0), 0)
|
||||
|
||||
def test_poll_auto_submits_unsubmitted(self):
|
||||
with patch("apps.assets.review.submit_asset_for_review", return_value=True) as mock_submit, patch(
|
||||
"apps.assets.review.poll_asset_review", return_value="processing"
|
||||
):
|
||||
r = self.ac.post("/api/admin/asset-reviews/poll/", {}, format="json")
|
||||
self.assertEqual(r.status_code, 200)
|
||||
self.assertGreaterEqual(r.data["submitted"], 1)
|
||||
mock_submit.assert_called()
|
||||
|
||||
|
||||
class AdminTaskMonitorTests(TestCase):
|
||||
|
||||
@@ -406,15 +406,20 @@ def admin_asset_reviews_submit(request):
|
||||
@api_view(["POST"])
|
||||
@permission_classes([IsPlatformAdmin])
|
||||
def admin_asset_reviews_poll(request):
|
||||
"""轮询审核中(processing)资产的最新状态。给 asset_ids 则只轮询这些,否则轮询全平台 processing。"""
|
||||
"""自动送审未送审资产 + 轮询审核中状态。给 asset_ids 则只轮询这些,否则全平台兜底。"""
|
||||
from apps.assets.review import drain_platform_reviews
|
||||
|
||||
ids = request.data.get("asset_ids")
|
||||
qs = Asset.objects.filter(category__in=Asset.REVIEW_CATEGORIES, review_status="processing", is_deleted=False)
|
||||
if ids:
|
||||
qs = qs.filter(id__in=ids)
|
||||
statuses = {}
|
||||
for asset in qs:
|
||||
statuses[str(asset.id)] = poll_asset_review(asset)
|
||||
return Response({"polled": len(statuses), "statuses": statuses})
|
||||
qs = Asset.objects.filter(
|
||||
category__in=Asset.REVIEW_CATEGORIES, review_status="processing", is_deleted=False, id__in=ids
|
||||
)
|
||||
statuses = {}
|
||||
for asset in qs:
|
||||
statuses[str(asset.id)] = poll_asset_review(asset)
|
||||
return Response({"polled": len(statuses), "submitted": 0, "statuses": statuses})
|
||||
result = drain_platform_reviews()
|
||||
return Response(result)
|
||||
|
||||
|
||||
def _refresh_inflight_task(task: AITask, *, operator) -> AITask:
|
||||
|
||||
Reference in New Issue
Block a user