Skip to content

Commit 42e7a0f

Browse files
fix(25): fix None defaults for debug step NumberSelector/DateTimeSelector
DEFAULT_DEBUG_LAT, DEFAULT_DEBUG_LON, and DEFAULT_DEBUG_DATETIME are None. Passing None as vol.Optional default serializes to null JSON, which crashes HA's frontend NumberSelector/DateTimeSelector components before the debug step renders, causing the "unknown error" on options flow save. Apply same pattern as EntitySelector fix: omit default entirely when the field has no saved value so the field renders empty rather than null. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 3fb7cbb commit 42e7a0f

1 file changed

Lines changed: 34 additions & 45 deletions

File tree

custom_components/asp_parking/config_flow.py

Lines changed: 34 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -385,53 +385,42 @@ async def async_step_debug(
385385
)
386386
return self.async_create_entry(title="", data=options)
387387

388-
return self.async_show_form(
389-
step_id="debug",
390-
data_schema=vol.Schema({
391-
vol.Optional(
392-
CONF_DEBUG_ENABLED,
393-
default=self.config_entry.options.get(
394-
CONF_DEBUG_ENABLED, DEFAULT_DEBUG_ENABLED
395-
),
396-
): selector.BooleanSelector(),
397-
vol.Optional(
398-
CONF_DEBUG_LAT,
399-
default=self.config_entry.options.get(
400-
CONF_DEBUG_LAT, DEFAULT_DEBUG_LAT
401-
),
402-
): selector.NumberSelector(
403-
selector.NumberSelectorConfig(
404-
min=-90,
405-
max=90,
406-
step=0.000001,
407-
mode=selector.NumberSelectorMode.BOX,
408-
)
388+
opts = self.config_entry.options
389+
debug_schema: dict = {
390+
vol.Optional(
391+
CONF_DEBUG_ENABLED,
392+
default=opts.get(CONF_DEBUG_ENABLED, DEFAULT_DEBUG_ENABLED),
393+
): selector.BooleanSelector(),
394+
**({
395+
vol.Optional(CONF_DEBUG_LAT, default=opts[CONF_DEBUG_LAT]): selector.NumberSelector(
396+
selector.NumberSelectorConfig(min=-90, max=90, step=0.000001, mode=selector.NumberSelectorMode.BOX)
409397
),
410-
vol.Optional(
411-
CONF_DEBUG_LON,
412-
default=self.config_entry.options.get(
413-
CONF_DEBUG_LON, DEFAULT_DEBUG_LON
414-
),
415-
): selector.NumberSelector(
416-
selector.NumberSelectorConfig(
417-
min=-180,
418-
max=180,
419-
step=0.000001,
420-
mode=selector.NumberSelectorMode.BOX,
421-
)
398+
} if CONF_DEBUG_LAT in opts else {
399+
vol.Optional(CONF_DEBUG_LAT): selector.NumberSelector(
400+
selector.NumberSelectorConfig(min=-90, max=90, step=0.000001, mode=selector.NumberSelectorMode.BOX)
401+
),
402+
}),
403+
**({
404+
vol.Optional(CONF_DEBUG_LON, default=opts[CONF_DEBUG_LON]): selector.NumberSelector(
405+
selector.NumberSelectorConfig(min=-180, max=180, step=0.000001, mode=selector.NumberSelectorMode.BOX)
406+
),
407+
} if CONF_DEBUG_LON in opts else {
408+
vol.Optional(CONF_DEBUG_LON): selector.NumberSelector(
409+
selector.NumberSelectorConfig(min=-180, max=180, step=0.000001, mode=selector.NumberSelectorMode.BOX)
422410
),
423-
vol.Optional(
424-
CONF_DEBUG_DATETIME,
425-
default=self.config_entry.options.get(
426-
CONF_DEBUG_DATETIME, DEFAULT_DEBUG_DATETIME
427-
),
428-
): selector.DateTimeSelector(),
429-
vol.Optional(
430-
CONF_SUPPRESS_NOTIFICATIONS,
431-
default=self.config_entry.options.get(
432-
CONF_SUPPRESS_NOTIFICATIONS, DEFAULT_SUPPRESS_NOTIFICATIONS
433-
),
434-
): selector.BooleanSelector(),
435411
}),
412+
**({
413+
vol.Optional(CONF_DEBUG_DATETIME, default=opts[CONF_DEBUG_DATETIME]): selector.DateTimeSelector(),
414+
} if CONF_DEBUG_DATETIME in opts else {
415+
vol.Optional(CONF_DEBUG_DATETIME): selector.DateTimeSelector(),
416+
}),
417+
vol.Optional(
418+
CONF_SUPPRESS_NOTIFICATIONS,
419+
default=opts.get(CONF_SUPPRESS_NOTIFICATIONS, DEFAULT_SUPPRESS_NOTIFICATIONS),
420+
): selector.BooleanSelector(),
421+
}
422+
return self.async_show_form(
423+
step_id="debug",
424+
data_schema=vol.Schema(debug_schema),
436425
errors=errors,
437426
)

0 commit comments

Comments
 (0)