From 8ae5053471a2bec673937b6da8d50d5ab131ee99 Mon Sep 17 00:00:00 2001 From: nicfb Date: Mon, 21 Nov 2022 16:12:47 -0800 Subject: [PATCH] handle invalid events --- kosmorro/__main__.py | 13 +++++++++++-- kosmorro/exceptions.py | 12 ++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/kosmorro/__main__.py b/kosmorro/__main__.py index 1108878..fa5f051 100644 --- a/kosmorro/__main__.py +++ b/kosmorro/__main__.py @@ -47,6 +47,7 @@ from .exceptions import ( SearchDatesNotGivenError, UnavailableFeatureError, OutOfRangeDateError as DateRangeError, + InvalidEventTypeError, ) from kosmorro.i18n.utils import _ @@ -135,6 +136,10 @@ def run(): use_colors, args.show_graph, ) + except InvalidEventTypeError as error: + print_stderr(colored(error.msg, "red")) + debug.debug_print(error) + return 7 except InvalidDateRangeError as error: print_stderr(colored(error, "red")) debug.debug_print(error) @@ -258,8 +263,12 @@ def get_search_information( try: if search_until is None: raise SearchDatesNotGivenError - - event_types = [EventType[event.upper()] for event in requested_events] + + try: + event_types = [EventType[event.upper()] for event in requested_events] + except KeyError as error: + raise InvalidEventTypeError(error.args[0]) + from_ = parse_date(search_from) until = parse_date(search_until) events_list = search_events(event_types, until, from_, timezone) diff --git a/kosmorro/exceptions.py b/kosmorro/exceptions.py index 8229013..7ee91f5 100644 --- a/kosmorro/exceptions.py +++ b/kosmorro/exceptions.py @@ -19,6 +19,7 @@ from datetime import date from babel.dates import format_date from kosmorro.i18n.utils import _, SHORT_DATE_FORMAT +from kosmorrolib.enum import EventType class UnavailableFeatureError(RuntimeError): @@ -60,6 +61,17 @@ class SearchDatesNotGivenError(RuntimeError): "Search end date (--until) is required when searching events." ) +class InvalidEventTypeError(RuntimeError): + def __init__(self, invalid_event: EventType): + super().__init__() + self.invalid_event = invalid_event + supported_events = ', '.join([event.name for _, event in enumerate(EventType)]) + self.msg = _( + "Invalid event type {event}.\nSupported events are {events}." + ).format( + event=self.invalid_event, + events=supported_events, + ) class CompileError(RuntimeError): def __init__(self, msg):