(event: Dict[str, Any])
| 2049 | payload = deepcopy( |
| 2050 | { |
| 2051 | key: value |
| 2052 | for key, value in task.items() |
| 2053 | if key not in {"thread", "preview_items_by_key"} |
| 2054 | } |
| 2055 | ) |
| 2056 | payload["preview_push"] = _preview_payload(task) |
| 2057 | return payload |
| 2058 | |
| 2059 | |
| 2060 | def _make_daily_progress_callback(task_id: str): |
| 2061 | def callback(event: Dict[str, Any]) -> None: |
| 2062 | if not isinstance(event, dict): |
| 2063 | return |
| 2064 | phase = str(event.get("phase") or "").strip() |
| 2065 | paper = event.get("paper") |
| 2066 | with _DAILY_TASK_LOCK: |
| 2067 | task = _DAILY_TASKS.get(task_id) |
| 2068 | if not task: |
| 2069 | return |
| 2070 | task["progress_phase"] = phase or task.get("progress_phase") |
| 2071 | task["updated_at"] = _task_timestamp() |
| 2072 | if phase == "source_complete": |
| 2073 | task.setdefault("source_counts", {})[str(event.get("source") or "unknown")] = int(event.get("count") or 0) |
| 2074 | if phase == "deduplicated": |
| 2075 | task["deduplicated_count"] = int(event.get("count") or 0) |
| 2076 | if phase == "scored": |
| 2077 | task["scored_count"] = int(event.get("count") or 0) |
| 2078 | if not isinstance(paper, dict): |
| 2079 | return |
| 2080 | |
| 2081 | key = _preview_key(paper) |
| 2082 | if not key: |
| 2083 | return |
| 2084 | by_key = task.setdefault("preview_items_by_key", {}) |
| 2085 | items = task.setdefault("preview_items", []) |
| 2086 | |
| 2087 | if phase == "ranked" and task.get("preview_mode") != "ranked": |
| 2088 | task["preview_mode"] = "ranked" |
| 2089 | by_key.clear() |
| 2090 | items.clear() |
| 2091 | |
| 2092 | item = dict(paper) |
| 2093 | if phase == "fetched": |
| 2094 | item.setdefault("category", "pending") |
| 2095 | if phase == "ranked": |
| 2096 | item["score"] = event.get("score") |
| 2097 | item["category"] = event.get("category") or item.get("category") or "unknown" |
| 2098 | item["rank"] = event.get("rank") or len(items) + 1 |
| 2099 | |
| 2100 | if key in by_key: |
| 2101 | index = by_key[key] |
| 2102 | items[index].update(item) |
nothing calls this directly
no test coverage detected