切换监测 V2 配置及已发布图片接口

This commit is contained in:
2026-09-03 21:59:59 +08:00
parent 26e91597ab
commit 5d4bdac501
4 changed files with 75 additions and 72 deletions

View File

@@ -60,10 +60,10 @@ def list_collections_by_subject(subject_name: str, start_date: str = "", end_dat
def get_summary(batch_key: str = "", collection_key: str = "",
start_date: str = "", end_date: str = "") -> dict[str, Any]:
start_date: str = "", end_date: str = "", subject_name: str = "") -> dict[str, Any]:
data = _get("/xhs/ocr/dashboard/summary", {
"batch_key": batch_key, "collection_key": collection_key,
"start_date": start_date, "end_date": end_date,
"start_date": start_date, "end_date": end_date, "subject_name": subject_name,
}) or {}
return _overlay_acceptance_questions(data, batch_key)
@@ -176,36 +176,34 @@ def get_result_matches(result_id: int) -> dict[str, Any]:
def list_evidences(params: dict[str, Any]) -> dict[str, Any]:
allowed = {"batch_key", "collection_key", "start_date", "end_date", "question_code", "evidence_type", "limit"}
query = {key: value for key, value in params.items() if key in allowed}
if not (str(query.get("batch_key") or "").strip() or str(query.get("collection_key") or "").strip()
or str(query.get("start_date") or "").strip() or str(query.get("end_date") or "").strip()):
raise TaskError("OCR_EVIDENCE_SCOPE_REQUIRED", "batch_key/collection_key 或 start_date/end_date 至少传入一种", 422)
limit = int(query.get("limit") or 10)
if not any(str(query.get(key) or "").strip() for key in
("batch_key", "collection_key", "start_date", "end_date")):
raise TaskError("OCR_EVIDENCE_SCOPE_REQUIRED", "请指定采集批次或日期范围", 422)
try:
limit = int(query.get("limit") or 10)
except (ValueError, TypeError) as exc:
raise TaskError("OCR_EVIDENCE_LIMIT_INVALID", "limit 必须在 1 到 100 之间", 422) from exc
if not 1 <= limit <= 100:
raise TaskError("OCR_EVIDENCE_LIMIT_INVALID", "limit 必须在 1 到 100 之间", 422)
query["limit"] = limit
data = _get("/xhs/ocr/dashboard/evidences", query) or {
"items": [], "total": 0, "limit": limit, "is_complete": False,
}
if Config.EVIDENCE_ADMIN_BASE_URL and query.get("batch_key") and query.get("question_code"):
try:
response = SESSION.get(
f"{Config.EVIDENCE_ADMIN_BASE_URL}/api/evidences",
params={
"batch_key": query["batch_key"],
"collection_key": query.get("collection_key", ""),
"question_code": query["question_code"],
},
timeout=min(Config.CRAWLER_TIMEOUT_SECONDS, 10),
)
response.raise_for_status()
manual_items = (response.json().get("data") or [])
data["items"] = manual_items
data["total"] = len(manual_items)
data["limit"] = limit
data["is_complete"] = True
except (requests.RequestException, ValueError):
pass
return data
if not Config.EVIDENCE_ADMIN_BASE_URL:
raise TaskError("OCR_PUBLISHED_EVIDENCE_UNAVAILABLE", "图片展示服务未配置", 503)
try:
response = SESSION.get(
f"{Config.EVIDENCE_ADMIN_BASE_URL}/api/published-evidences",
params=query, timeout=min(Config.CRAWLER_TIMEOUT_SECONDS, 10),
)
response.raise_for_status()
payload = response.json()
data = payload.get("data")
if payload.get("error") or not isinstance(data, dict) or not isinstance(data.get("items"), list):
raise ValueError("Invalid published image response")
# Fail closed if an old or incompatible admin server returns unapproved images.
if any(item.get("is_published") is not True for item in data["items"]):
raise ValueError("Unpublished image returned by admin")
return data
except (requests.RequestException, ValueError, TypeError, AttributeError) as exc:
raise TaskError("OCR_PUBLISHED_EVIDENCE_UNAVAILABLE", "已发布图片暂时无法读取,请稍后重试", 502) from exc
def list_configured_notes(params: dict[str, Any] | None = None) -> list[dict[str, Any]]: