72 lines
2.4 KiB
Python
72 lines
2.4 KiB
Python
from __future__ import annotations
|
|
|
|
from online_mining_common import (
|
|
compact_text,
|
|
emit_error,
|
|
emit_success,
|
|
extract_case,
|
|
fetch_one_by_request_id,
|
|
load_json_payload,
|
|
string_values,
|
|
write_optional_jsonl,
|
|
)
|
|
|
|
|
|
def main() -> int:
|
|
try:
|
|
payload = load_json_payload()
|
|
request_ids = string_values(payload.get("request_ids"))
|
|
if not request_ids:
|
|
raise ValueError("request_ids is required")
|
|
sources = payload.get("sources") or ["main", "pre_processing"]
|
|
date = payload.get("date")
|
|
date_from = payload.get("date_from")
|
|
date_to = payload.get("date_to")
|
|
lookback_days = payload.get("lookback_days")
|
|
lookback_days = int(lookback_days) if lookback_days not in (None, "") else None
|
|
rows = []
|
|
for request_id in request_ids:
|
|
item = {"request_id": request_id}
|
|
for source in sources:
|
|
doc = fetch_one_by_request_id(
|
|
str(source),
|
|
request_id,
|
|
date,
|
|
date_from=date_from,
|
|
date_to=date_to,
|
|
lookback_days=lookback_days,
|
|
)
|
|
item[str(source)] = extract_case(str(source), doc) if doc else None
|
|
rows.append(item)
|
|
output_path = write_optional_jsonl(str(payload.get("output_path") or ""), rows)
|
|
emit_success(
|
|
{
|
|
"date": date or (f"{date_from}..{date_to}" if date_from and date_to else f"past-{lookback_days}d" if lookback_days else "past-48h"),
|
|
"count": len(rows),
|
|
"output_path": output_path,
|
|
"cases": [
|
|
{
|
|
source: (
|
|
{
|
|
key: compact_text(value, 1000)
|
|
for key, value in (case or {}).items()
|
|
if key != "raw" and value not in (None, "", [], {})
|
|
}
|
|
if isinstance(case, dict)
|
|
else case
|
|
)
|
|
for source, case in row.items()
|
|
}
|
|
for row in rows
|
|
],
|
|
}
|
|
)
|
|
return 0
|
|
except Exception as exc: # noqa: BLE001
|
|
emit_error(exc)
|
|
return 1
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|