mirror of
https://github.com/home-assistant/core.git
synced 2025-07-14 16:57:10 +00:00
Add suggested_value helper for FlowHandler (#82491)
* Add suggested_value helper for ConfigFlow * Move helper function to FlowHandler * Rename and adjust docstring * Fix rebase
This commit is contained in:
parent
53e05dec02
commit
724a79a8e8
@ -4,6 +4,7 @@ from __future__ import annotations
|
|||||||
import abc
|
import abc
|
||||||
import asyncio
|
import asyncio
|
||||||
from collections.abc import Iterable, Mapping
|
from collections.abc import Iterable, Mapping
|
||||||
|
import copy
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
import logging
|
import logging
|
||||||
from types import MappingProxyType
|
from types import MappingProxyType
|
||||||
@ -443,6 +444,34 @@ class FlowHandler:
|
|||||||
"""If we should show advanced options."""
|
"""If we should show advanced options."""
|
||||||
return self.context.get("show_advanced_options", False)
|
return self.context.get("show_advanced_options", False)
|
||||||
|
|
||||||
|
def add_suggested_values_to_schema(
|
||||||
|
self, data_schema: vol.Schema, suggested_values: Mapping[str, Any]
|
||||||
|
) -> vol.Schema:
|
||||||
|
"""Make a copy of the schema, populated with suggested values.
|
||||||
|
|
||||||
|
For each schema marker matching items in `suggested_values`,
|
||||||
|
the `suggested_value` will be set. The existing `suggested_value` will
|
||||||
|
be left untouched if there is no matching item.
|
||||||
|
"""
|
||||||
|
schema = {}
|
||||||
|
for key, val in data_schema.schema.items():
|
||||||
|
if isinstance(key, vol.Marker):
|
||||||
|
# Exclude advanced field
|
||||||
|
if (
|
||||||
|
key.description
|
||||||
|
and key.description.get("advanced")
|
||||||
|
and not self.show_advanced_options
|
||||||
|
):
|
||||||
|
continue
|
||||||
|
|
||||||
|
new_key = key
|
||||||
|
if key in suggested_values and isinstance(key, vol.Marker):
|
||||||
|
# Copy the marker to not modify the flow schema
|
||||||
|
new_key = copy.copy(key)
|
||||||
|
new_key.description = {"suggested_value": suggested_values[key]}
|
||||||
|
schema[new_key] = val
|
||||||
|
return vol.Schema(schema)
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def async_show_form(
|
def async_show_form(
|
||||||
self,
|
self,
|
||||||
|
@ -210,25 +210,9 @@ class SchemaCommonFlowHandler:
|
|||||||
|
|
||||||
if data_schema.schema:
|
if data_schema.schema:
|
||||||
# Make a copy of the schema with suggested values set to saved options
|
# Make a copy of the schema with suggested values set to saved options
|
||||||
schema = {}
|
data_schema = self._handler.add_suggested_values_to_schema(
|
||||||
for key, val in data_schema.schema.items():
|
data_schema, suggested_values
|
||||||
|
)
|
||||||
if isinstance(key, vol.Marker):
|
|
||||||
# Exclude advanced field
|
|
||||||
if (
|
|
||||||
key.description
|
|
||||||
and key.description.get("advanced")
|
|
||||||
and not self._handler.show_advanced_options
|
|
||||||
):
|
|
||||||
continue
|
|
||||||
|
|
||||||
new_key = key
|
|
||||||
if key in suggested_values and isinstance(key, vol.Marker):
|
|
||||||
# Copy the marker to not modify the flow schema
|
|
||||||
new_key = copy.copy(key)
|
|
||||||
new_key.description = {"suggested_value": suggested_values[key]}
|
|
||||||
schema[new_key] = val
|
|
||||||
data_schema = vol.Schema(schema)
|
|
||||||
|
|
||||||
errors = {"base": str(error)} if error else None
|
errors = {"base": str(error)} if error else None
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user