Fetch model forecasts on scan refresh
This commit is contained in:
@@ -328,6 +328,7 @@ def test_scan_city_terminal_rows_rejects_expired_panel_cache(monkeypatch):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
monkeypatch.setattr(scan_terminal_city_row, "_PANEL_CACHE_DB", _Cache())
|
monkeypatch.setattr(scan_terminal_city_row, "_PANEL_CACHE_DB", _Cache())
|
||||||
|
monkeypatch.setattr(scan_terminal_city_row._weather, "fetch_multi_model", lambda *args, **kwargs: None)
|
||||||
|
|
||||||
result = scan_terminal_city_row._scan_city_terminal_rows(
|
result = scan_terminal_city_row._scan_city_terminal_rows(
|
||||||
"paris",
|
"paris",
|
||||||
@@ -466,6 +467,7 @@ def test_scan_city_terminal_rows_uses_canonical_without_analyze(monkeypatch):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
monkeypatch.setattr(scan_terminal_city_row, "_PANEL_CACHE_DB", _Cache())
|
monkeypatch.setattr(scan_terminal_city_row, "_PANEL_CACHE_DB", _Cache())
|
||||||
|
monkeypatch.setattr(scan_terminal_city_row._weather, "fetch_multi_model", lambda *args, **kwargs: None)
|
||||||
monkeypatch.setattr(
|
monkeypatch.setattr(
|
||||||
scan_terminal_city_row,
|
scan_terminal_city_row,
|
||||||
"_analyze",
|
"_analyze",
|
||||||
|
|||||||
@@ -188,19 +188,17 @@ def _fetch_today_forecast_panel_payload(
|
|||||||
|
|
||||||
def _load_scan_panel_payload(city: str, *, force_refresh: bool) -> Optional[Dict[str, Any]]:
|
def _load_scan_panel_payload(city: str, *, force_refresh: bool) -> Optional[Dict[str, Any]]:
|
||||||
refresh_already_queued = False
|
refresh_already_queued = False
|
||||||
if not force_refresh:
|
cached_entry = _PANEL_CACHE_DB.get_city_cache("panel", city)
|
||||||
cached_entry = _PANEL_CACHE_DB.get_city_cache("panel", city)
|
cached_payload = cached_entry.get("payload") if isinstance(cached_entry, dict) else None
|
||||||
cached_payload = cached_entry.get("payload") if isinstance(cached_entry, dict) else None
|
if isinstance(cached_payload, dict):
|
||||||
if isinstance(cached_payload, dict):
|
stale_reason = _panel_cache_stale_reason(city, cached_entry, cached_payload)
|
||||||
stale_reason = _panel_cache_stale_reason(city, cached_entry, cached_payload)
|
if not force_refresh and stale_reason is None:
|
||||||
if stale_reason is None:
|
return cached_payload
|
||||||
return cached_payload
|
_enqueue_scan_terminal_refresh(city, reason=stale_reason or "scan_terminal_force_forecast_refresh")
|
||||||
_enqueue_scan_terminal_refresh(city, reason=stale_reason)
|
refresh_already_queued = True
|
||||||
refresh_already_queued = True
|
refreshed_payload = _fetch_today_forecast_panel_payload(city, cached_payload)
|
||||||
if stale_reason == "scan_terminal_stale_panel_date":
|
if refreshed_payload:
|
||||||
refreshed_payload = _fetch_today_forecast_panel_payload(city, cached_payload)
|
return refreshed_payload
|
||||||
if refreshed_payload:
|
|
||||||
return refreshed_payload
|
|
||||||
|
|
||||||
canonical_getter = getattr(_PANEL_CACHE_DB, "get_canonical_temperature", None)
|
canonical_getter = getattr(_PANEL_CACHE_DB, "get_canonical_temperature", None)
|
||||||
canonical_entry = canonical_getter(city) if callable(canonical_getter) else None
|
canonical_entry = canonical_getter(city) if callable(canonical_getter) else None
|
||||||
@@ -214,6 +212,9 @@ def _load_scan_panel_payload(city: str, *, force_refresh: bool) -> Optional[Dict
|
|||||||
city_meta = CITIES.get(city) or {}
|
city_meta = CITIES.get(city) or {}
|
||||||
payload.setdefault("display_name", city_meta.get("name") or city_meta.get("display_name") or city)
|
payload.setdefault("display_name", city_meta.get("name") or city_meta.get("display_name") or city)
|
||||||
payload.setdefault("temp_symbol", canonical.get("temp_symbol") or "°C")
|
payload.setdefault("temp_symbol", canonical.get("temp_symbol") or "°C")
|
||||||
|
refreshed_payload = _fetch_today_forecast_panel_payload(city, payload)
|
||||||
|
if refreshed_payload:
|
||||||
|
payload = refreshed_payload
|
||||||
_enqueue_scan_terminal_refresh(city, reason="scan_terminal_canonical_fallback")
|
_enqueue_scan_terminal_refresh(city, reason="scan_terminal_canonical_fallback")
|
||||||
return payload
|
return payload
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user