from datetime import datetime from dateutil.relativedelta import relativedelta, MO, TU, WE, FR, SA def get_next_draw_date(game: str, from_date: str | None = None) -> str: """ Gets the next drawing date from the current or specified date for the given game If the current date is the next drawing date, the current date is returned :param game: megamillions or powerball :param from_date: date to get next drawing date from, if omitted the current date is used :return: next drawing date Examples: >>> get_next_draw_date(game='mega', from_date='02/15/2026') '02/17/2026' >>> get_next_draw_date(game='power', from_date='02/15/2026') '02/16/2026' """ return_date = '' return_date_format = '%m/%d/%Y' # if no date was specified, use today's date if from_date is None: from_date = datetime.today() else: from_date = datetime.strptime(from_date, return_date_format) day_of_week = from_date.weekday() # target the selected game if game == 'megamillions': """drawings are on Tuesday and Friday""" if day_of_week in [1, 4]: return_date = from_date.strftime(return_date_format) elif day_of_week in [2, 3]: return_date = (from_date + relativedelta(weekday=FR)).strftime(return_date_format) elif day_of_week in [5, 6, 0]: return_date = (from_date + relativedelta(weekday=TU)).strftime(return_date_format) elif game == 'powerball': """drawings are on Monday, Wednesday, and Saturday""" if day_of_week in [0, 2, 5]: return_date = from_date.strftime(return_date_format) elif day_of_week == 1: return_date = (from_date + relativedelta(weekday=WE)).strftime(return_date_format) elif day_of_week in [3, 4]: return_date = (from_date + relativedelta(weekday=SA)).strftime(return_date_format) elif day_of_week == 6: return_date = (from_date + relativedelta(weekday=MO)).strftime(return_date_format) return return_date