diff --git a/padel/combo.py b/padel/combo.py index 8039f0e..1073c3e 100644 --- a/padel/combo.py +++ b/padel/combo.py @@ -1,5 +1,6 @@ from tennis import get_time_slots, get_club_address from weather import WeatherAPI +from datetime import timedelta import asyncio as aio @@ -23,7 +24,36 @@ async def get_decent_timeslots(club_id, weather_api_key, days=1): weather_forecasts = sorted(filter(lambda x: x[2] in GOOD_CODES, weather_forecasts), key=lambda x: x[0]) - # Filter out non-free timeslots - timeslots = filter(lambda x: x[1] == 0, timeslots) + # Convert weather_forecasts to dict for faster lookups + weather_forecasts = {date_obj: weather_str for date_obj, weather_str, _ in + weather_forecasts} + print(weather_forecasts) - return timeslots + # Filter out non-free timeslots + timeslots = list(filter(lambda x: x[1] == 0, timeslots)) + print(timeslots) + + output = [] + + for field_name, _, start_time, duration in timeslots: + start_hour = start_time.replace(minute=0) + + weather_names = [] + valid = True + + while start_hour < start_time + duration: + if (weather_name := weather_forecasts.get(start_hour)): + weather_names.append(weather_name) + + # If we can't find any information about the timeslot, we assume + # it's bad + else: + valid = False + break + + start_hour += timedelta(hours=1) + + if valid: + output.append((field_name, start_time, duration, weather_names)) + + return output