|
All checks were successful
PR build (required check) / changes (pull_request) Successful in 6s
secrets-guard / encrypted (pull_request) Successful in 5s
shell-lint / shellcheck (pull_request) Successful in 7s
PR build (required check) / build-frontend (pull_request) Has been skipped
PR build (required check) / validate-observability (pull_request) Has been skipped
PR build (required check) / build-backend (pull_request) Successful in 49s
PR build (required check) / gate (pull_request) Successful in 2s
The /climate/<city>[/month|/records] pages render from the content derived-store keyed by content_token (PAYLOAD_VER:CONTENT_VER:archive last-date), which turns over ~daily when a cell's archive gains a day. On the first request after each advance the page recomputed a 45-year payload cold. Add warm_cities.warm_content: for each curated city, compute the cheap content token and check whether every content kind (city, 12 months, records) already has a fresh row; cities wholly fresh are skipped without loading the archive, so a re-run is near-instant and only cells whose archive advanced do work. Cache-only like main() — a cell with no cached archive is skipped, never fetched, so warming spends no upstream quota. A per-call limit caps cities (re)built so one pass's wall-clock is bounded; the idempotent skip resumes on the next call. Ride it on the leader-gated notifier loop next to the homepage sweep: _maybe_warm_content runs at most every 30 min, capped at 50 cities per tick, so a tick can't stall the notifier and the ~1000-city set refreshes across a handful of ticks — well inside the <=1-day staleness the token already tolerates. |
||
|---|---|---|
| .. | ||
| accounts | ||
| api | ||
| core | ||
| data | ||
| notifications | ||
| web | ||
| conftest.py | ||
| test_drift_check.py | ||
| test_indexnow.py | ||
| test_seed_era5.py | ||
| test_warm_cities.py | ||
| test_warm_content.py | ||