Move manual configuration of MQTT fan and light to the integration key (#71676)
* Processing yaml config through entry setup * Setup all platforms * Update homeassistant/components/mqtt/__init__.py Co-authored-by: Martin Hjelmare <marhje52@gmail.com> * adjust mock_mqtt - reference config from cache * Fix test config entry override * Add tests yaml setup * additional tests * Introduce PLATFORM_SCHEMA_MODERN * recover temporary MQTT_BASE_PLATFORM_SCHEMA * Allow extra key in light base schema, restore test * Fix test for exception on platform key * One deprecation message per platform * Remove deprecation checks from modern schema * Update homeassistant/components/mqtt/fan.py Co-authored-by: Erik Montnemery <erik@montnemery.com> * Update homeassistant/components/mqtt/fan.py Co-authored-by: Erik Montnemery <erik@montnemery.com> * Update homeassistant/components/mqtt/light/__init__.py Co-authored-by: Erik Montnemery <erik@montnemery.com> * Update homeassistant/components/mqtt/light/__init__.py Co-authored-by: Erik Montnemery <erik@montnemery.com> * Update homeassistant/components/mqtt/light/schema_json.py Co-authored-by: Erik Montnemery <erik@montnemery.com> * Update homeassistant/components/mqtt/light/schema_template.py Co-authored-by: Erik Montnemery <erik@montnemery.com> * Update homeassistant/components/mqtt/mixins.py Co-authored-by: Erik Montnemery <erik@montnemery.com> * rename validate_modern_schema * Do not fail platform if a single config is broken * Update homeassistant/components/mqtt/__init__.py Co-authored-by: Erik Montnemery <erik@montnemery.com> * Fix tests on asserting log * Update log. Make helper transparant, remove patch * Perform parallel processing * Update tests/components/mqtt/test_init.py Co-authored-by: Martin Hjelmare <marhje52@gmail.com> * Apply suggestions from code review Co-authored-by: Martin Hjelmare <marhje52@gmail.com> * Update homeassistant/components/mqtt/mixins.py Co-authored-by: Martin Hjelmare <marhje52@gmail.com> * black * Fix tests and add #new_format anchor Co-authored-by: Martin Hjelmare <marhje52@gmail.com> Co-authored-by: Erik Montnemery <erik@montnemery.com>
This commit is contained in:
parent
9d377aabdb
commit
ed1c2ea2b8
16 changed files with 339 additions and 28 deletions
|
@ -9,6 +9,7 @@ from typing import Any, Protocol, cast, final
|
|||
|
||||
import voluptuous as vol
|
||||
|
||||
from homeassistant.config import async_log_exception
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import (
|
||||
ATTR_CONFIGURATION_URL,
|
||||
|
@ -64,6 +65,7 @@ from .const import (
|
|||
CONF_ENCODING,
|
||||
CONF_QOS,
|
||||
CONF_TOPIC,
|
||||
DATA_MQTT_CONFIG,
|
||||
DATA_MQTT_RELOAD_NEEDED,
|
||||
DEFAULT_ENCODING,
|
||||
DEFAULT_PAYLOAD_AVAILABLE,
|
||||
|
@ -223,6 +225,31 @@ MQTT_ENTITY_COMMON_SCHEMA = MQTT_AVAILABILITY_SCHEMA.extend(
|
|||
)
|
||||
|
||||
|
||||
def warn_for_legacy_schema(domain: str) -> Callable:
|
||||
"""Warn once when a legacy platform schema is used."""
|
||||
warned = set()
|
||||
|
||||
def validator(config: ConfigType) -> ConfigType:
|
||||
"""Return a validator."""
|
||||
nonlocal warned
|
||||
|
||||
if domain in warned:
|
||||
return config
|
||||
|
||||
_LOGGER.warning(
|
||||
"Manually configured MQTT %s(s) found under platform key '%s', "
|
||||
"please move to the mqtt integration key, see "
|
||||
"https://www.home-assistant.io/integrations/%s.mqtt/#new_format",
|
||||
domain,
|
||||
domain,
|
||||
domain,
|
||||
)
|
||||
warned.add(domain)
|
||||
return config
|
||||
|
||||
return validator
|
||||
|
||||
|
||||
class SetupEntity(Protocol):
|
||||
"""Protocol type for async_setup_entities."""
|
||||
|
||||
|
@ -237,6 +264,31 @@ class SetupEntity(Protocol):
|
|||
"""Define setup_entities type."""
|
||||
|
||||
|
||||
async def async_get_platform_config_from_yaml(
|
||||
hass: HomeAssistant, domain: str, schema: vol.Schema
|
||||
) -> list[ConfigType]:
|
||||
"""Return a list of validated configurations for the domain."""
|
||||
|
||||
def async_validate_config(
|
||||
hass: HomeAssistant,
|
||||
config: list[ConfigType],
|
||||
) -> list[ConfigType]:
|
||||
"""Validate config."""
|
||||
validated_config = []
|
||||
for config_item in config:
|
||||
try:
|
||||
validated_config.append(schema(config_item))
|
||||
except vol.MultipleInvalid as err:
|
||||
async_log_exception(err, domain, config_item, hass)
|
||||
|
||||
return validated_config
|
||||
|
||||
config_yaml: ConfigType = hass.data.get(DATA_MQTT_CONFIG, {})
|
||||
if not (platform_configs := config_yaml.get(domain)):
|
||||
return []
|
||||
return async_validate_config(hass, platform_configs)
|
||||
|
||||
|
||||
async def async_setup_entry_helper(hass, domain, async_setup, schema):
|
||||
"""Set up entity, automation or tag creation dynamically through MQTT discovery."""
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue