mirror of https://github.com/home-assistant/core
112 lines
3.4 KiB
Python
112 lines
3.4 KiB
Python
"""Config flow for Trend integration."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from collections.abc import Mapping
|
|
from typing import Any, cast
|
|
|
|
import voluptuous as vol
|
|
|
|
from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN
|
|
from homeassistant.const import CONF_ATTRIBUTE, CONF_ENTITY_ID, CONF_NAME, UnitOfTime
|
|
from homeassistant.helpers import selector
|
|
from homeassistant.helpers.schema_config_entry_flow import (
|
|
SchemaCommonFlowHandler,
|
|
SchemaConfigFlowHandler,
|
|
SchemaFlowFormStep,
|
|
)
|
|
|
|
from .const import (
|
|
CONF_INVERT,
|
|
CONF_MAX_SAMPLES,
|
|
CONF_MIN_GRADIENT,
|
|
CONF_MIN_SAMPLES,
|
|
CONF_SAMPLE_DURATION,
|
|
DEFAULT_MAX_SAMPLES,
|
|
DEFAULT_MIN_GRADIENT,
|
|
DEFAULT_MIN_SAMPLES,
|
|
DEFAULT_SAMPLE_DURATION,
|
|
DOMAIN,
|
|
)
|
|
|
|
|
|
async def get_base_options_schema(handler: SchemaCommonFlowHandler) -> vol.Schema:
|
|
"""Get base options schema."""
|
|
return vol.Schema(
|
|
{
|
|
vol.Optional(CONF_ATTRIBUTE): selector.AttributeSelector(
|
|
selector.AttributeSelectorConfig(
|
|
entity_id=handler.options[CONF_ENTITY_ID]
|
|
)
|
|
),
|
|
vol.Optional(CONF_INVERT, default=False): selector.BooleanSelector(),
|
|
}
|
|
)
|
|
|
|
|
|
async def get_extended_options_schema(handler: SchemaCommonFlowHandler) -> vol.Schema:
|
|
"""Get extended options schema."""
|
|
return (await get_base_options_schema(handler)).extend(
|
|
{
|
|
vol.Optional(
|
|
CONF_MAX_SAMPLES, default=DEFAULT_MAX_SAMPLES
|
|
): selector.NumberSelector(
|
|
selector.NumberSelectorConfig(
|
|
min=2,
|
|
mode=selector.NumberSelectorMode.BOX,
|
|
),
|
|
),
|
|
vol.Optional(
|
|
CONF_MIN_SAMPLES, default=DEFAULT_MIN_SAMPLES
|
|
): selector.NumberSelector(
|
|
selector.NumberSelectorConfig(
|
|
min=2,
|
|
mode=selector.NumberSelectorMode.BOX,
|
|
),
|
|
),
|
|
vol.Optional(
|
|
CONF_MIN_GRADIENT, default=DEFAULT_MIN_GRADIENT
|
|
): selector.NumberSelector(
|
|
selector.NumberSelectorConfig(
|
|
step="any",
|
|
mode=selector.NumberSelectorMode.BOX,
|
|
),
|
|
),
|
|
vol.Optional(
|
|
CONF_SAMPLE_DURATION, default=DEFAULT_SAMPLE_DURATION
|
|
): selector.NumberSelector(
|
|
selector.NumberSelectorConfig(
|
|
min=0,
|
|
mode=selector.NumberSelectorMode.BOX,
|
|
unit_of_measurement=UnitOfTime.SECONDS,
|
|
),
|
|
),
|
|
}
|
|
)
|
|
|
|
|
|
CONFIG_SCHEMA = vol.Schema(
|
|
{
|
|
vol.Required(CONF_NAME): selector.TextSelector(),
|
|
vol.Required(CONF_ENTITY_ID): selector.EntitySelector(
|
|
selector.EntitySelectorConfig(domain=SENSOR_DOMAIN, multiple=False),
|
|
),
|
|
}
|
|
)
|
|
|
|
|
|
class ConfigFlowHandler(SchemaConfigFlowHandler, domain=DOMAIN):
|
|
"""Handle a config or options flow for Trend."""
|
|
|
|
config_flow = {
|
|
"user": SchemaFlowFormStep(schema=CONFIG_SCHEMA, next_step="settings"),
|
|
"settings": SchemaFlowFormStep(get_base_options_schema),
|
|
}
|
|
options_flow = {
|
|
"init": SchemaFlowFormStep(get_extended_options_schema),
|
|
}
|
|
|
|
def async_config_entry_title(self, options: Mapping[str, Any]) -> str:
|
|
"""Return config entry title."""
|
|
return cast(str, options[CONF_NAME])
|