切换监测 V2 配置及已发布图片接口
This commit is contained in:
@@ -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]]:
|
||||
|
||||
Reference in New Issue
Block a user