feat: complete heaven readings and screener publication
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Any
|
||||
|
||||
|
||||
def resolve_published_batch(
|
||||
markers: list[dict[str, Any]],
|
||||
requested_date: str,
|
||||
legacy_date: str = "",
|
||||
) -> tuple[dict[str, Any] | None, dict[str, Any], dict[str, Any] | None]:
|
||||
requested_marker = next(
|
||||
(
|
||||
item for item in markers
|
||||
if str(item.get("trade_date") or "") == requested_date
|
||||
),
|
||||
None,
|
||||
)
|
||||
published = next(
|
||||
(item for item in markers if item.get("status") == "complete"),
|
||||
None,
|
||||
)
|
||||
if published is None and legacy_date:
|
||||
published = {
|
||||
"trade_date": legacy_date,
|
||||
"status": "complete",
|
||||
"legacy_inferred": True,
|
||||
"completed": [],
|
||||
"skipped": [],
|
||||
"failed": [],
|
||||
}
|
||||
|
||||
request_status = dict(requested_marker or {})
|
||||
request_status.setdefault("trade_date", requested_date)
|
||||
request_status.setdefault("status", "pending")
|
||||
descriptor = _published_descriptor(published, requested_date, request_status)
|
||||
if descriptor and descriptor["is_fallback"]:
|
||||
request_status["retaining_trade_date"] = descriptor["trade_date"]
|
||||
return published, request_status, descriptor
|
||||
|
||||
|
||||
def _published_descriptor(
|
||||
marker: dict[str, Any] | None,
|
||||
requested_date: str,
|
||||
request_status: dict[str, Any],
|
||||
) -> dict[str, Any] | None:
|
||||
if marker is None:
|
||||
return None
|
||||
trade_date = str(marker.get("trade_date") or "")
|
||||
is_fallback = trade_date != requested_date
|
||||
status = str(request_status.get("status") or "pending")
|
||||
notice = ""
|
||||
if is_fallback:
|
||||
if status == "running":
|
||||
notice = "所选日期候选正在生成,当前保留上一成功批次"
|
||||
elif status in {"failed", "partial"}:
|
||||
notice = "所选日期候选未完整发布,当前保留上一成功批次"
|
||||
else:
|
||||
notice = "所选日期候选尚未发布,当前展示最近成功批次"
|
||||
return {
|
||||
"trade_date": trade_date,
|
||||
"status": "complete",
|
||||
"started_at": marker.get("started_at") or "",
|
||||
"finished_at": marker.get("finished_at") or marker.get("updated_at") or "",
|
||||
"library_version": int(marker.get("library_version") or 0),
|
||||
"completed_count": len(marker.get("completed") or []),
|
||||
"skipped_count": len(marker.get("skipped") or []),
|
||||
"legacy_inferred": bool(marker.get("legacy_inferred")),
|
||||
"is_fallback": is_fallback,
|
||||
"notice": notice,
|
||||
}
|
||||
Reference in New Issue
Block a user