From 16f94e68b3f7093637242e3eab08b32988a11308 Mon Sep 17 00:00:00 2001 From: Allen Porter Date: Thu, 8 Dec 2022 13:44:45 -0800 Subject: [PATCH] Improve local calendar input validation error handling (#83563) --- .../components/local_calendar/calendar.py | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/homeassistant/components/local_calendar/calendar.py b/homeassistant/components/local_calendar/calendar.py index 79d16634883..63a2f2b03d2 100644 --- a/homeassistant/components/local_calendar/calendar.py +++ b/homeassistant/components/local_calendar/calendar.py @@ -11,6 +11,8 @@ from ical.calendar_stream import IcsCalendarStream from ical.event import Event from ical.store import EventStore from ical.types import Range, Recur +from pydantic import ValidationError +import voluptuous as vol from homeassistant.components.calendar import ( EVENT_DESCRIPTION, @@ -102,14 +104,19 @@ class LocalCalendarEntity(CalendarEntity): async def async_create_event(self, **kwargs: Any) -> None: """Add a new event to calendar.""" - event = Event.parse_obj( - { - EVENT_SUMMARY: kwargs[EVENT_SUMMARY], - EVENT_START: kwargs[EVENT_START], - EVENT_END: kwargs[EVENT_END], - EVENT_DESCRIPTION: kwargs.get(EVENT_DESCRIPTION), - } - ) + event_data = { + EVENT_SUMMARY: kwargs[EVENT_SUMMARY], + EVENT_START: kwargs[EVENT_START], + EVENT_END: kwargs[EVENT_END], + EVENT_DESCRIPTION: kwargs.get(EVENT_DESCRIPTION), + } + try: + event = Event.parse_obj(event_data) + except ValidationError as err: + _LOGGER.debug( + "Error parsing event input fields: %s (%s)", event_data, str(err) + ) + raise vol.Invalid("Error parsing event input fields") from err if rrule := kwargs.get(EVENT_RRULE): event.rrule = Recur.from_rrule(rrule)