ha(H4): защита _preview_schema от повреждённых overrides в storage
This commit is contained in:
@@ -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)),
|
||||
}
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user