From 7d9b69f5286e6cc0b35da8c104195c1c3c1bbafa Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Sun, 15 Feb 2026 16:09:35 -0500 Subject: [PATCH] Add utility function to get next drawing date --- util/drawing.py | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 util/drawing.py diff --git a/util/drawing.py b/util/drawing.py new file mode 100644 index 0000000..c7b12e5 --- /dev/null +++ b/util/drawing.py @@ -0,0 +1,47 @@ +from datetime import datetime +from dateutil.relativedelta import relativedelta, MO, TU, WE, FR + + +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 + :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 Friday""" + if day_of_week in [0, 2, 4]: + 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 == 3: + return_date = (from_date + relativedelta(weekday=FR)).strftime(return_date_format) + elif day_of_week in [5, 6]: + return_date = (from_date + relativedelta(weekday=MO)).strftime(return_date_format) + return return_date