diff --git a/custom_components/fglair/config_flow.py b/custom_components/fglair/config_flow.py index b923b16..fdf9d20 100644 --- a/custom_components/fglair/config_flow.py +++ b/custom_components/fglair/config_flow.py @@ -101,14 +101,29 @@ def _import_schema() -> vol.Schema: ) +def _spec_int(spec: dict[str, Any], key: str, default: int) -> int: + try: + return int(spec.get(key, default)) + except (TypeError, ValueError): + return default + + def _preview_schema(data: dict[str, Any]) -> vol.Schema: template = Template[str(data.get(CONF_TEMPLATE, "A"))] - spec = (data.get(CONF_OVERRIDES) or {}).get( - Prop.ADJUST_TEMPERATURE.name.lower(), {} + overrides = data.get(CONF_OVERRIDES) + spec = ( + overrides.get(Prop.ADJUST_TEMPERATURE.name.lower(), {}) + if isinstance(overrides, dict) + else {} ) - temp_min = int(spec.get("min", TEMP_MIN_TENTHS)) - temp_max = int(spec.get("max", TEMP_MAX_TENTHS)) - step = int(data.get(CONF_TEMP_STEP) or TEMP_STEP_TENTHS[template]) + if not isinstance(spec, dict): + spec = {} + temp_min = _spec_int(spec, "min", TEMP_MIN_TENTHS) + temp_max = _spec_int(spec, "max", TEMP_MAX_TENTHS) + try: + step = int(data.get(CONF_TEMP_STEP) or TEMP_STEP_TENTHS[template]) + except (TypeError, ValueError): + step = TEMP_STEP_TENTHS[template] return vol.Schema( { vol.Required(CONF_TEMPLATE, default=template.name): vol.In( @@ -123,14 +138,14 @@ def _preview_schema(data: dict[str, Any]) -> vol.Schema: vol.Required(CONF_TEMP_STEP, default=step / 10): vol.All( vol.Coerce(float), vol.Range(min=0.1, max=5.0) ), - vol.Required(CONF_TEMP_NUM, default=int(spec.get("num", 1))): vol.All( - int, vol.Range(min=1, max=1000) - ), - vol.Required(CONF_TEMP_DEN, default=int(spec.get("den", 1))): vol.All( - int, vol.Range(min=1, max=1000) - ), vol.Required( - CONF_TEMP_OFFSET, default=int(spec.get("offset", 0)) + CONF_TEMP_NUM, default=_spec_int(spec, "num", 1) + ): vol.All(int, vol.Range(min=1, max=1000)), + vol.Required( + CONF_TEMP_DEN, default=_spec_int(spec, "den", 1) + ): vol.All(int, vol.Range(min=1, max=1000)), + vol.Required( + CONF_TEMP_OFFSET, default=_spec_int(spec, "offset", 0) ): vol.All(int, vol.Range(min=-1000, max=1000)), } )