Thermograph monorepo: graded-climate API + SSR frontend + infra, domain-specific containerized deploys
The forecast path had no backup — unlike history, which falls back to NASA POWER. When Open-Meteo's forecast API was rate-limited or down, the recent/forecast bundle (and every endpoint that grades future days) failed with a 503. Add MET Norway (yr.no) Locationforecast as a keyless, global forecast backup, mirroring the NASA POWER role for history: - _metno_to_frame: aggregates MET Norway's sub-daily timeseries into the daily schema, converting units (°C→°F, mm→in, m/s→mph) and deriving feels-like from the NWS heat index / wind chill (MET has no gusts or apparent temperature). Precip prefers the 1-hour block and falls back to the 6-hour block so the hourly→6-hourly resolution switch never double-counts. - _fetch_forecast_metno: the backup fetch, with the ToS-required identifying User-Agent and coordinates rounded to 4 decimals. - _load_recent_forecast: on any Open-Meteo forecast failure, try MET Norway before surfacing the error; a shared rate limit still raises the typed, daily-aware WeatherUnavailable. MET Norway is forecast-only (no recent past days), so it's a degraded-but-working fallback: the forecast / day-ahead views keep serving during an Open-Meteo outage. Tests cover the daily aggregation + unit conversion (incl. the no-double-count precip rule) and the fallback wiring. |
||
|---|---|---|
| templates | ||
| tests | ||
| api_accounts.py | ||
| app.py | ||
| audit.py | ||
| cities.json | ||
| cities.py | ||
| cities_flavor.json | ||
| city_events.py | ||
| climate.py | ||
| content.py | ||
| db.py | ||
| gen_cities.py | ||
| gen_flavor.py | ||
| grading.py | ||
| grid.py | ||
| migrate.py | ||
| models.py | ||
| notify.py | ||
| places.py | ||
| push.py | ||
| requirements-dev.txt | ||
| requirements.txt | ||
| schemas.py | ||
| store.py | ||
| users.py | ||
| views.py | ||
| warm_cities.py | ||