Add handler to validate_user_input (#82681)
* Add handler to validate_user_input * Adjust group config flowpull/82691/head
parent
f3b3193f7a
commit
a4dbb9a24e
|
@ -11,6 +11,7 @@ from homeassistant.const import CONF_ENTITIES
|
|||
from homeassistant.core import HomeAssistant, callback
|
||||
from homeassistant.helpers import entity_registry as er, selector
|
||||
from homeassistant.helpers.schema_config_entry_flow import (
|
||||
SchemaCommonFlowHandler,
|
||||
SchemaConfigFlowHandler,
|
||||
SchemaFlowFormStep,
|
||||
SchemaFlowMenuStep,
|
||||
|
@ -104,11 +105,15 @@ def choose_options_step(options: dict[str, Any]) -> str:
|
|||
return cast(str, options["group_type"])
|
||||
|
||||
|
||||
def set_group_type(group_type: str) -> Callable[[dict[str, Any]], dict[str, Any]]:
|
||||
def set_group_type(
|
||||
group_type: str,
|
||||
) -> Callable[[SchemaCommonFlowHandler, dict[str, Any]], dict[str, Any]]:
|
||||
"""Set group type."""
|
||||
|
||||
@callback
|
||||
def _set_group_type(user_input: dict[str, Any]) -> dict[str, Any]:
|
||||
def _set_group_type(
|
||||
handler: SchemaCommonFlowHandler, user_input: dict[str, Any]
|
||||
) -> dict[str, Any]:
|
||||
"""Add group type to user input."""
|
||||
return {"group_type": group_type, **user_input}
|
||||
|
||||
|
|
|
@ -36,6 +36,7 @@ from homeassistant.const import (
|
|||
)
|
||||
from homeassistant.core import async_get_hass
|
||||
from homeassistant.helpers.schema_config_entry_flow import (
|
||||
SchemaCommonFlowHandler,
|
||||
SchemaConfigFlowHandler,
|
||||
SchemaFlowError,
|
||||
SchemaFlowFormStep,
|
||||
|
@ -113,7 +114,9 @@ SENSOR_SETUP = {
|
|||
}
|
||||
|
||||
|
||||
def validate_rest_setup(user_input: dict[str, Any]) -> dict[str, Any]:
|
||||
def validate_rest_setup(
|
||||
handler: SchemaCommonFlowHandler, user_input: dict[str, Any]
|
||||
) -> dict[str, Any]:
|
||||
"""Validate rest setup."""
|
||||
hass = async_get_hass()
|
||||
rest_config: dict[str, Any] = COMBINED_SCHEMA(user_input)
|
||||
|
@ -124,7 +127,9 @@ def validate_rest_setup(user_input: dict[str, Any]) -> dict[str, Any]:
|
|||
return user_input
|
||||
|
||||
|
||||
def validate_sensor_setup(user_input: dict[str, Any]) -> dict[str, Any]:
|
||||
def validate_sensor_setup(
|
||||
handler: SchemaCommonFlowHandler, user_input: dict[str, Any]
|
||||
) -> dict[str, Any]:
|
||||
"""Validate sensor setup."""
|
||||
return {
|
||||
"sensor": [
|
||||
|
|
|
@ -10,6 +10,7 @@ from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN
|
|||
from homeassistant.const import CONF_ENTITY_ID, CONF_NAME
|
||||
from homeassistant.helpers import selector
|
||||
from homeassistant.helpers.schema_config_entry_flow import (
|
||||
SchemaCommonFlowHandler,
|
||||
SchemaConfigFlowHandler,
|
||||
SchemaFlowError,
|
||||
SchemaFlowFormStep,
|
||||
|
@ -18,11 +19,13 @@ from homeassistant.helpers.schema_config_entry_flow import (
|
|||
from .const import CONF_HYSTERESIS, CONF_LOWER, CONF_UPPER, DEFAULT_HYSTERESIS, DOMAIN
|
||||
|
||||
|
||||
def _validate_mode(data: Any) -> Any:
|
||||
def _validate_mode(
|
||||
handler: SchemaCommonFlowHandler, user_input: dict[str, Any]
|
||||
) -> dict[str, Any]:
|
||||
"""Validate the threshold mode, and set limits to None if not set."""
|
||||
if CONF_LOWER not in data and CONF_UPPER not in data:
|
||||
if CONF_LOWER not in user_input and CONF_UPPER not in user_input:
|
||||
raise SchemaFlowError("need_lower_upper")
|
||||
return {CONF_LOWER: None, CONF_UPPER: None, **data}
|
||||
return {CONF_LOWER: None, CONF_UPPER: None, **user_input}
|
||||
|
||||
|
||||
OPTIONS_SCHEMA = vol.Schema(
|
||||
|
|
|
@ -10,6 +10,7 @@ from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN
|
|||
from homeassistant.const import CONF_NAME
|
||||
from homeassistant.helpers import selector
|
||||
from homeassistant.helpers.schema_config_entry_flow import (
|
||||
SchemaCommonFlowHandler,
|
||||
SchemaConfigFlowHandler,
|
||||
SchemaFlowError,
|
||||
SchemaFlowFormStep,
|
||||
|
@ -46,14 +47,16 @@ METER_TYPES = [
|
|||
]
|
||||
|
||||
|
||||
def _validate_config(data: Any) -> Any:
|
||||
def _validate_config(
|
||||
handler: SchemaCommonFlowHandler, user_input: dict[str, Any]
|
||||
) -> dict[str, Any]:
|
||||
"""Validate config."""
|
||||
try:
|
||||
vol.Unique()(data[CONF_TARIFFS])
|
||||
vol.Unique()(user_input[CONF_TARIFFS])
|
||||
except vol.Invalid as exc:
|
||||
raise SchemaFlowError("tariffs_not_unique") from exc
|
||||
|
||||
return data
|
||||
return user_input
|
||||
|
||||
|
||||
OPTIONS_SCHEMA = vol.Schema(
|
||||
|
|
|
@ -44,7 +44,9 @@ class SchemaFlowFormStep(SchemaFlowStep):
|
|||
user input is requested.
|
||||
"""
|
||||
|
||||
validate_user_input: Callable[[dict[str, Any]], dict[str, Any]] = lambda x: x
|
||||
validate_user_input: Callable[
|
||||
[SchemaCommonFlowHandler, dict[str, Any]], dict[str, Any]
|
||||
] | None = None
|
||||
"""Optional function to validate user input.
|
||||
|
||||
- The `validate_user_input` function is called if the schema validates successfully.
|
||||
|
@ -124,10 +126,10 @@ class SchemaCommonFlowHandler:
|
|||
):
|
||||
user_input[str(key.schema)] = key.default()
|
||||
|
||||
if user_input is not None and form_step.schema is not None:
|
||||
if user_input is not None and form_step.validate_user_input is not None:
|
||||
# Do extra validation of user input
|
||||
try:
|
||||
user_input = form_step.validate_user_input(user_input)
|
||||
user_input = form_step.validate_user_input(self, user_input)
|
||||
except SchemaFlowError as exc:
|
||||
return self._show_next_step(step_id, exc, user_input)
|
||||
|
||||
|
|
Loading…
Reference in New Issue