Slim deferred scan runway history

This commit is contained in:
2569718930@qq.com
2026-06-01 06:25:27 +08:00
parent 7625a99020
commit 6bc53c6e5d
3 changed files with 86 additions and 1 deletions
+40
View File
@@ -5,6 +5,9 @@ from web.scan_terminal_payloads import (
build_failed_scan_terminal_payload,
build_scan_terminal_snapshot_id,
build_stale_scan_terminal_payload,
compact_ranked_scan_rows_for_payload,
SCAN_PAYLOAD_DEFERRED_RUNWAY_POINTS,
SCAN_PAYLOAD_FULL_RUNWAY_HISTORY_ROWS,
)
from web.scan_terminal_ranker import build_ranked_scan_terminal_result
from web.scan_terminal_city_row import _build_quick_row
@@ -206,6 +209,43 @@ def test_scan_terminal_snapshot_id_is_stable_for_same_ranked_inputs():
assert first.startswith("scan-")
def test_scan_terminal_payload_slims_deferred_runway_history_rows():
runway_points = [
{"time": f"2026-05-31T{hour:02d}:00:00+00:00", "temp": 20 + hour}
for hour in range(24)
]
rows = [
{
"id": f"row-{index}",
"runway_plate_history": {"35R": list(runway_points)},
}
for index in range(SCAN_PAYLOAD_FULL_RUNWAY_HISTORY_ROWS + 2)
]
compacted = compact_ranked_scan_rows_for_payload(rows)
assert len(compacted[0]["runway_plate_history"]["35R"]) == len(runway_points)
assert (
len(
compacted[SCAN_PAYLOAD_FULL_RUNWAY_HISTORY_ROWS - 1][
"runway_plate_history"
]["35R"]
)
== len(runway_points)
)
assert (
len(
compacted[SCAN_PAYLOAD_FULL_RUNWAY_HISTORY_ROWS][
"runway_plate_history"
]["35R"]
)
== SCAN_PAYLOAD_DEFERRED_RUNWAY_POINTS
)
assert len(rows[SCAN_PAYLOAD_FULL_RUNWAY_HISTORY_ROWS]["runway_plate_history"]["35R"]) == len(
runway_points
)
def test_scan_terminal_quick_row_compacts_runway_history_for_list_payload():
raw_history = {
"35R": [
+42
View File
@@ -5,6 +5,48 @@ import json
from datetime import datetime
from typing import Any, Dict, List, Optional
SCAN_PAYLOAD_FULL_RUNWAY_HISTORY_ROWS = 9
SCAN_PAYLOAD_DEFERRED_RUNWAY_POINTS = 12
def _compact_runway_history_points(
history: Any,
*,
max_points: int,
) -> Dict[str, List[Dict[str, Any]]]:
if not isinstance(history, dict) or max_points <= 0:
return {}
compacted: Dict[str, List[Dict[str, Any]]] = {}
for runway, points in history.items():
if not isinstance(points, list) or not points:
continue
compacted[str(runway)] = points[-max_points:]
return compacted
def compact_ranked_scan_rows_for_payload(
rows: List[Dict[str, Any]],
*,
full_history_rows: int = SCAN_PAYLOAD_FULL_RUNWAY_HISTORY_ROWS,
deferred_runway_points: int = SCAN_PAYLOAD_DEFERRED_RUNWAY_POINTS,
) -> List[Dict[str, Any]]:
compacted_rows: List[Dict[str, Any]] = []
for index, row in enumerate(rows):
if index < full_history_rows:
compacted_rows.append(row)
continue
history = row.get("runway_plate_history")
if not isinstance(history, dict) or not history:
compacted_rows.append(row)
continue
next_row = dict(row)
next_row["runway_plate_history"] = _compact_runway_history_points(
history,
max_points=deferred_runway_points,
)
compacted_rows.append(next_row)
return compacted_rows
def build_scan_terminal_snapshot_id(
filters: Dict[str, Any],
+4 -1
View File
@@ -35,6 +35,7 @@ from web.scan_terminal_payloads import (
build_failed_scan_terminal_payload,
build_scan_terminal_snapshot_id,
build_stale_scan_terminal_payload,
compact_ranked_scan_rows_for_payload,
)
from web.scan_terminal_ranker import build_ranked_scan_terminal_result
def _normalize_locale(value: Any) -> str:
@@ -210,7 +211,9 @@ def _build_scan_terminal_payload_uncached(
total_city_count=len(city_names),
failed_city_count=len(failed_cities),
)
ranked_rows = ranked_result["ranked_rows"]
ranked_rows = compact_ranked_scan_rows_for_payload(
ranked_result["ranked_rows"]
)
if timed_out and not ranked_rows:
success_payload = cached_entry.get("success_payload")