Cleanup weather_data.py.
[python_utils.git] / cached / weather_data.py
index 29a1d544b042101042eeb9d0a1eb781de094e427..8793bd315940b8ef16fb63d059b14b178fabc153 100644 (file)
@@ -11,7 +11,7 @@ import logging
 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
 
@@ -20,6 +20,8 @@ import config
 import datetime_utils
 import list_utils
 import persistent
+import scott_secrets
+import type_utils
 
 logger = logging.getLogger(__name__)
 
@@ -56,7 +58,7 @@ class WeatherData:
 
 @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
@@ -80,12 +82,12 @@ class CachedWeatherData(persistent.Persistent):
         }
         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'
         )
@@ -173,8 +175,8 @@ class CachedWeatherData(persistent.Persistent):
                 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,