Fix options flow bugs in Google/Waze Time Travel (#49866)

This commit is contained in:
Raman Gupta 2021-04-29 15:57:48 -04:00 committed by GitHub
parent 22bda640b0
commit 042099de14
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 21 additions and 11 deletions

View File

@ -56,14 +56,17 @@ class GoogleOptionsFlow(config_entries.OptionsFlow):
user_input[CONF_ARRIVAL_TIME] = time user_input[CONF_ARRIVAL_TIME] = time
else: else:
user_input[CONF_DEPARTURE_TIME] = time user_input[CONF_DEPARTURE_TIME] = time
return self.async_create_entry(title="", data=user_input) return self.async_create_entry(
title="",
data={k: v for k, v in user_input.items() if v not in (None, "")},
)
if CONF_ARRIVAL_TIME in self.config_entry.options: if CONF_ARRIVAL_TIME in self.config_entry.options:
default_time_type = ARRIVAL_TIME default_time_type = ARRIVAL_TIME
default_time = self.config_entry.options[CONF_ARRIVAL_TIME] default_time = self.config_entry.options[CONF_ARRIVAL_TIME]
else: else:
default_time_type = DEPARTURE_TIME default_time_type = DEPARTURE_TIME
default_time = self.config_entry.options.get(CONF_ARRIVAL_TIME) default_time = self.config_entry.options.get(CONF_ARRIVAL_TIME, "")
return self.async_show_form( return self.async_show_form(
step_id="init", step_id="init",
@ -75,10 +78,10 @@ class GoogleOptionsFlow(config_entries.OptionsFlow):
vol.Optional( vol.Optional(
CONF_LANGUAGE, CONF_LANGUAGE,
default=self.config_entry.options.get(CONF_LANGUAGE), default=self.config_entry.options.get(CONF_LANGUAGE),
): vol.In(ALL_LANGUAGES), ): vol.In([None, *ALL_LANGUAGES]),
vol.Optional( vol.Optional(
CONF_AVOID, default=self.config_entry.options.get(CONF_AVOID) CONF_AVOID, default=self.config_entry.options.get(CONF_AVOID)
): vol.In(AVOID), ): vol.In([None, *AVOID]),
vol.Optional( vol.Optional(
CONF_UNITS, default=self.config_entry.options[CONF_UNITS] CONF_UNITS, default=self.config_entry.options[CONF_UNITS]
): vol.In(UNITS), ): vol.In(UNITS),
@ -89,17 +92,17 @@ class GoogleOptionsFlow(config_entries.OptionsFlow):
vol.Optional( vol.Optional(
CONF_TRAFFIC_MODEL, CONF_TRAFFIC_MODEL,
default=self.config_entry.options.get(CONF_TRAFFIC_MODEL), default=self.config_entry.options.get(CONF_TRAFFIC_MODEL),
): vol.In(TRAVEL_MODEL), ): vol.In([None, *TRAVEL_MODEL]),
vol.Optional( vol.Optional(
CONF_TRANSIT_MODE, CONF_TRANSIT_MODE,
default=self.config_entry.options.get(CONF_TRANSIT_MODE), default=self.config_entry.options.get(CONF_TRANSIT_MODE),
): vol.In(TRANSPORT_TYPE), ): vol.In([None, *TRANSPORT_TYPE]),
vol.Optional( vol.Optional(
CONF_TRANSIT_ROUTING_PREFERENCE, CONF_TRANSIT_ROUTING_PREFERENCE,
default=self.config_entry.options.get( default=self.config_entry.options.get(
CONF_TRANSIT_ROUTING_PREFERENCE CONF_TRANSIT_ROUTING_PREFERENCE
), ),
): vol.In(TRANSIT_PREFS), ): vol.In([None, *TRANSIT_PREFS]),
} }
), ),
) )

View File

@ -41,7 +41,10 @@ class WazeOptionsFlow(config_entries.OptionsFlow):
async def async_step_init(self, user_input=None): async def async_step_init(self, user_input=None):
"""Handle the initial step.""" """Handle the initial step."""
if user_input is not None: if user_input is not None:
return self.async_create_entry(title="", data=user_input) return self.async_create_entry(
title="",
data={k: v for k, v in user_input.items() if v not in (None, "")},
)
return self.async_show_form( return self.async_show_form(
step_id="init", step_id="init",
@ -49,11 +52,11 @@ class WazeOptionsFlow(config_entries.OptionsFlow):
{ {
vol.Optional( vol.Optional(
CONF_INCL_FILTER, CONF_INCL_FILTER,
default=self.config_entry.options.get(CONF_INCL_FILTER), default=self.config_entry.options.get(CONF_INCL_FILTER, ""),
): cv.string, ): cv.string,
vol.Optional( vol.Optional(
CONF_EXCL_FILTER, CONF_EXCL_FILTER,
default=self.config_entry.options.get(CONF_EXCL_FILTER), default=self.config_entry.options.get(CONF_EXCL_FILTER, ""),
): cv.string, ): cv.string,
vol.Optional( vol.Optional(
CONF_REALTIME, CONF_REALTIME,

View File

@ -331,7 +331,11 @@ class WazeTravelTimeData:
if excl_filter.lower() not in k.lower() if excl_filter.lower() not in k.lower()
} }
route = list(routes)[0] if len(routes) > 0:
route = list(routes)[0]
else:
_LOGGER.warning("No routes found")
return
self.duration, distance = routes[route] self.duration, distance = routes[route]