import os
import urllib.request
from dataclasses import dataclass
-from typing import Any, List
+from typing import Any, Dict, List, Optional
from overrides import overrides
import datetime_utils
import list_utils
import persistent
+import scott_secrets
+import type_utils
logger = logging.getLogger(__name__)
@persistent.persistent_autoloaded_singleton() # type: ignore
class CachedWeatherData(persistent.Persistent):
- def __init__(self, weather_data=None):
+ def __init__(self, weather_data: Dict[datetime.date, WeatherData] = None):
if weather_data is not None:
self.weather_data = weather_data
return
}
now = datetime.datetime.now()
dates = set()
- highs = {}
- lows = {}
- conditions = {}
- precip = {}
+ highs: Dict[datetime.date, Optional[float]] = {}
+ lows: Dict[datetime.date, Optional[float]] = {}
+ conditions: Dict[datetime.date, List[str]] = {}
+ precip: Dict[datetime.date, float] = {}
param = "id=5786882" # Bellevue, WA
- key = "c0b160c49743622f62a9cd3cda0270b3"
+ key = scott_secrets.OPEN_WEATHER_MAP_KEY
www = urllib.request.urlopen(
f'http://api.openweathermap.org/data/2.5/weather?zip=98005,us&APPID={key}&units=imperial'
)
icon = '🌙'
self.weather_data[dt] = WeatherData(
date=dt,
- high=highs[dt],
- low=lows[dt],
+ high=type_utils.unwrap_optional(highs[dt]),
+ low=type_utils.unwrap_optional(lows[dt]),
precipitation_inches=precip[dt] / 25.4,
conditions=conditions[dt],
most_common_condition=most_common_condition,