diff --git a/main.py b/main.py index 7233928..ad465aa 100644 --- a/main.py +++ b/main.py @@ -42,6 +42,19 @@ def format_datetime(dt): return f"{format_date(dt)} {format_time(dt)}" +def pollen_desc(index): + if index < 2.5: + return f"{index} l" + elif index < 4.9: + return f"{index} l-m" + elif index < 7.3: + return f"{index} m" + elif index < 9.7: + return f"{index} m-h" + else: + return f"{index} h" + + def relative_day_to_date(rel_dt): dt = datetime.now() day = timedelta(days=1) @@ -56,24 +69,6 @@ def relative_day_to_date(rel_dt): return passthrough -def build_daily_data(date, pollen_periods, weather_periods): - daily_data = {} - if date in pollen_periods: - daily_data["pollen"] = pollen_periods[date]["index"] - if date in weather_periods: - weather_data = weather_periods[date] - daily_data.update({ - "low": weather_data["low"], - "high": weather_data["high"], - "desc": weather_data["desc"], - "humidity": weather_data["humidity"], - "sunrise": weather_data["sunrise"], - "sunset": weather_data["sunset"], - "pressure": weather_data["pressure"], - }) - return daily_data - - def fallback_handler(func): @functools.wraps(func) async def wrapper(*args, **kwargs): @@ -111,11 +106,10 @@ async def fetch_pollen(zipcode): ), "periods": [ { - "index": int(d["Index"] / 12. * 100), + "index": pollen_desc(d["Index"]), "period": relative_day_to_date(d["Type"]), } for d in data["Location"]["periods"] - if d["Type"].lower().strip() in ["today", "tomorrow"] ], } ] @@ -128,7 +122,7 @@ async def fetch_weather(lat, lon, weather_api_key): response = await client.get(url) response.raise_for_status() data = response.json() - current, periods = data["current"], data["daily"][:2] + current, periods = data["current"], data["daily"][:3] return [ { "forecast_date": format_datetime(datetime.fromtimestamp(current["dt"])), @@ -169,49 +163,8 @@ async def read_root(token: str): fetch_weather(CONFIG["lat"], CONFIG["lon"], CONFIG["weather_api_key"]), ) - pollen_periods = {p["period"]: p for p in pollen[0]["periods"]} if pollen and pollen[0]["periods"] else {} - weather_periods = {p["period"]: p for p in weather[0]["periods"]} if weather and weather[0]["periods"] else {} - - # Add current weather data as a "current" period - if weather and weather[0]: - data = weather[0] - weather_periods["current"] = { - "period": "current", - "temp": data["current_temp"], - "feels_like": data["current_feels_like"], - "humidity": data["current_humidity"], - "pressure": data["current_pressure"], - "desc": data["current_desc"], - "sunrise": data["sunrise"], - "sunset": data["sunset"] - } - - today_date = format_date(datetime.now()) - tomorrow_date = format_date(datetime.now() + timedelta(days=1)) - - result = { + return { "fetched_at": format_datetime(datetime.now()), - "current": {}, - "today": {}, - "tomorrow": {}, + "pollen": pollen, + "weather": weather, } - - if "current" in weather_periods: - weather_data = weather_periods["current"] - result["current"] = { - "temp": weather_data["temp"], - "feels_like": weather_data["feels_like"], - "desc": weather_data["desc"], - "humidity": weather_data["humidity"], - "pressure": weather_data["pressure"] - } - - today_data = build_daily_data(today_date, pollen_periods, weather_periods) - if today_data: - result["today"] = today_data - - tomorrow_data = build_daily_data(tomorrow_date, pollen_periods, weather_periods) - if tomorrow_data: - result["tomorrow"] = tomorrow_data - - return result