From 7f12282c42b050140d56bd03bb15b350e08626ab Mon Sep 17 00:00:00 2001 From: Edward Betts Date: Tue, 15 Jul 2025 17:42:47 +0200 Subject: [PATCH] Add week and year parameters to weekends page. Fixes #190 --- web_view.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/web_view.py b/web_view.py index 2042432..fd242f7 100755 --- a/web_view.py +++ b/web_view.py @@ -231,14 +231,29 @@ async def gaps_page() -> str: @app.route("/weekends") async def weekends() -> str: - """List of available weekends using an optional date parameter.""" + """List of available weekends using an optional date, week, or year parameter.""" today = datetime.now().date() date_str = flask.request.args.get("date") + week_str = flask.request.args.get("week") + year_str = flask.request.args.get("year") + if date_str: try: start = datetime.strptime(date_str, "%Y-%m-%d").date() except ValueError: return flask.abort(400, description="Invalid date format. Use YYYY-MM-DD.") + elif week_str: + try: + week = int(week_str) + year = int(year_str) if year_str else today.year + if week < 1 or week > 53: + return flask.abort(400, description="Week number must be between 1 and 53.") + # Calculate the date of the first day of the given week + jan_1 = date(year, 1, 1) + week_1_start = jan_1 - timedelta(days=jan_1.weekday()) + start = week_1_start + timedelta(weeks=week - 1) + except ValueError: + return flask.abort(400, description="Invalid week or year format. Use integers.") else: start = date(today.year, 1, 1)