From 909f0028e68bf018a043b4485dce1bf00d87eb08 Mon Sep 17 00:00:00 2001 From: Dmytro Trotsko Date: Tue, 5 Mar 2024 20:06:09 +0200 Subject: [PATCH] OKRS24-94 Fix uncaught user input processing in date util --- src/server/endpoints/covidcast.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/server/endpoints/covidcast.py b/src/server/endpoints/covidcast.py index 11de3cbca..fe0c64c28 100644 --- a/src/server/endpoints/covidcast.py +++ b/src/server/endpoints/covidcast.py @@ -242,6 +242,15 @@ def handle_export(): start_day, is_day = start_time_set.time_values[0], start_time_set.is_day end_time_set = parse_day_or_week_arg("end_day", 202020 if weekly_signals > 0 else 20200901) end_day, is_end_day = end_time_set.time_values[0], end_time_set.is_day + + format_date = time_value_to_iso if is_day else lambda x: time_value_to_week(x).cdcformat() + + try: + formatted_start_day = format_date(start_day) + formatted_end_day = format_date(end_day) + except ValueError as e: + raise ValidationFailedException("Invalid date format: " + str(e)) + if is_day != is_end_day: raise ValidationFailedException("mixing weeks with day arguments") _verify_argument_time_type_matches(is_day, daily_signals, weekly_signals) @@ -268,10 +277,9 @@ def handle_export(): q.apply_as_of_filter(history_table, as_of) - format_date = time_value_to_iso if is_day else lambda x: time_value_to_week(x).cdcformat() # tag as_of in filename, if it was specified as_of_str = "-asof-{as_of}".format(as_of=format_date(as_of)) if as_of is not None else "" - filename = "covidcast-{source}-{signal}-{start_day}-to-{end_day}{as_of}".format(source=source, signal=signal, start_day=format_date(start_day), end_day=format_date(end_day), as_of=as_of_str) + filename = "covidcast-{source}-{signal}-{start_day}-to-{end_day}{as_of}".format(source=source, signal=signal, start_day=formatted_start_day, end_day=formatted_end_day, as_of=as_of_str) p = CSVPrinter(filename) def parse_row(i, row):