Add updatable QA reviewStatus field to crawls (#1575)

Fixes #1539 

Adds `reviewStatus` field to `BaseCrawl` model, updatable via the crawl
update API endpoint. Acceptable values are "good", "acceptable" or
"failure", enforced by an Enum.

Added to `BaseCrawl` so that we can extend support to uploads more
easily later on, but for now we'll only display this for crawls in the
frontend.
This commit is contained in:
Tessa Walsh 2024-03-05 19:49:23 -05:00 committed by GitHub
parent 780dd09321
commit c20e754269
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 51 additions and 0 deletions

View File

@ -522,6 +522,15 @@ class CrawlFileOut(BaseModel):
expireAt: Optional[str]
# ============================================================================
class ReviewStatus(str, Enum):
"""QA review statuses"""
GOOD = "good"
ACCEPTABLE = "acceptable"
FAILURE = "failure"
# ============================================================================
class BaseCrawl(BaseMongoModel):
"""Base Crawl object (representing crawls, uploads and manual sessions)"""
@ -554,6 +563,8 @@ class BaseCrawl(BaseMongoModel):
fileSize: int = 0
fileCount: int = 0
reviewStatus: Optional[ReviewStatus] = None
# ============================================================================
class CollIdName(BaseModel):
@ -617,6 +628,8 @@ class CrawlOut(BaseMongoModel):
crawlerChannel: str = "default"
image: Optional[str]
reviewStatus: Optional[ReviewStatus] = None
# ============================================================================
class CrawlOutWithResources(CrawlOut):
@ -634,6 +647,7 @@ class UpdateCrawl(BaseModel):
description: Optional[str]
tags: Optional[List[str]]
collectionIds: Optional[List[UUID]]
reviewStatus: Optional[ReviewStatus]
# ============================================================================

View File

@ -282,6 +282,43 @@ def test_update_crawl(
assert data["description"] == UPDATED_DESC
assert data["name"] == UPDATED_NAME
assert data["collectionIds"] == UPDATED_COLLECTION_IDS
assert data.get("reviewStatus") is None
# Update reviewStatus and verify
r = requests.patch(
f"{API_PREFIX}/orgs/{default_org_id}/crawls/{admin_crawl_id}",
headers=admin_auth_headers,
json={
"reviewStatus": "good",
},
)
assert r.status_code == 200
data = r.json()
assert data["updated"]
r = requests.get(
f"{API_PREFIX}/orgs/{default_org_id}/crawls/{admin_crawl_id}",
headers=admin_auth_headers,
)
assert r.status_code == 200
assert r.json()["reviewStatus"] == "good"
# Try to update to invalid reviewStatus
r = requests.patch(
f"{API_PREFIX}/orgs/{default_org_id}/crawls/{admin_crawl_id}",
headers=admin_auth_headers,
json={
"reviewStatus": "invalid",
},
)
assert r.status_code == 422
r = requests.get(
f"{API_PREFIX}/orgs/{default_org_id}/crawls/{admin_crawl_id}",
headers=admin_auth_headers,
)
assert r.status_code == 200
assert r.json()["reviewStatus"] == "good"
# Verify deleting works as well
r = requests.patch(