mirror of
https://github.com/home-assistant/core.git
synced 2025-07-14 08:47:10 +00:00
Remove schema option for mqtt vacuum configs (#121093)
This commit is contained in:
parent
53767b6159
commit
2040c285b1
@ -1,9 +1,5 @@
|
|||||||
{
|
{
|
||||||
"issues": {
|
"issues": {
|
||||||
"deprecation_mqtt_schema_vacuum_yaml": {
|
|
||||||
"title": "MQTT vacuum entities with deprecated `schema` config settings found in your configuration.yaml",
|
|
||||||
"description": "The `schema` setting for MQTT vacuum entities is deprecated and should be removed. Please adjust your configuration.yaml and restart Home Assistant to fix this issue."
|
|
||||||
},
|
|
||||||
"deprecated_color_handling": {
|
"deprecated_color_handling": {
|
||||||
"title": "Deprecated color handling used for MQTT light",
|
"title": "Deprecated color handling used for MQTT light",
|
||||||
"description": "An MQTT light config (with `json` schema) found in `configuration.yaml` uses deprecated color handling flags.\n\nConfiguration found:\n```yaml\n{config}\n```\nDeprecated flags: **{deprecated_flags}**.\n\nUse the `supported_color_modes` option instead and [reload](/developer-tools/yaml) the manually configured MQTT items or restart Home Assistant to fix this issue."
|
"description": "An MQTT light config (with `json` schema) found in `configuration.yaml` uses deprecated color handling flags.\n\nConfiguration found:\n```yaml\n{config}\n```\nDeprecated flags: **{deprecated_flags}**.\n\nUse the `supported_color_modes` option instead and [reload](/developer-tools/yaml) the manually configured MQTT items or restart Home Assistant to fix this issue."
|
||||||
|
@ -7,7 +7,6 @@
|
|||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from collections.abc import Callable
|
|
||||||
import logging
|
import logging
|
||||||
from typing import Any, cast
|
from typing import Any, cast
|
||||||
|
|
||||||
@ -30,23 +29,16 @@ from homeassistant.const import (
|
|||||||
STATE_IDLE,
|
STATE_IDLE,
|
||||||
STATE_PAUSED,
|
STATE_PAUSED,
|
||||||
)
|
)
|
||||||
from homeassistant.core import HomeAssistant, async_get_hass, callback
|
from homeassistant.core import HomeAssistant, callback
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
from homeassistant.helpers.issue_registry import IssueSeverity, async_create_issue
|
|
||||||
from homeassistant.helpers.json import json_dumps
|
from homeassistant.helpers.json import json_dumps
|
||||||
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType, VolSchemaType
|
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType, VolSchemaType
|
||||||
from homeassistant.util.json import json_loads_object
|
from homeassistant.util.json import json_loads_object
|
||||||
|
|
||||||
from . import subscription
|
from . import subscription
|
||||||
from .config import MQTT_BASE_SCHEMA
|
from .config import MQTT_BASE_SCHEMA
|
||||||
from .const import (
|
from .const import CONF_COMMAND_TOPIC, CONF_RETAIN, CONF_SCHEMA, CONF_STATE_TOPIC
|
||||||
CONF_COMMAND_TOPIC,
|
|
||||||
CONF_RETAIN,
|
|
||||||
CONF_SCHEMA,
|
|
||||||
CONF_STATE_TOPIC,
|
|
||||||
DOMAIN,
|
|
||||||
)
|
|
||||||
from .mixins import MqttEntity, async_setup_entity_entry_helper
|
from .mixins import MqttEntity, async_setup_entity_entry_helper
|
||||||
from .models import ReceiveMessage
|
from .models import ReceiveMessage
|
||||||
from .schemas import MQTT_ENTITY_COMMON_SCHEMA
|
from .schemas import MQTT_ENTITY_COMMON_SCHEMA
|
||||||
@ -157,47 +149,6 @@ MQTT_VACUUM_ATTRIBUTES_BLOCKED = frozenset(
|
|||||||
MQTT_VACUUM_DOCS_URL = "https://www.home-assistant.io/integrations/vacuum.mqtt/"
|
MQTT_VACUUM_DOCS_URL = "https://www.home-assistant.io/integrations/vacuum.mqtt/"
|
||||||
|
|
||||||
|
|
||||||
def _fail_legacy_config(discovery: bool) -> Callable[[ConfigType], ConfigType]:
|
|
||||||
@callback
|
|
||||||
def _fail_legacy_config_callback(config: ConfigType) -> ConfigType:
|
|
||||||
"""Fail the legacy schema."""
|
|
||||||
if CONF_SCHEMA not in config:
|
|
||||||
return config
|
|
||||||
|
|
||||||
if config[CONF_SCHEMA] == "legacy":
|
|
||||||
raise vol.Invalid(
|
|
||||||
"The support for the `legacy` MQTT vacuum schema has been removed"
|
|
||||||
)
|
|
||||||
|
|
||||||
if discovery:
|
|
||||||
_LOGGER.warning(
|
|
||||||
"The `schema` option is deprecated for MQTT %s, but "
|
|
||||||
"it was used in a discovery payload. Please contact the maintainer "
|
|
||||||
"of the integration or service that supplies the config, and suggest "
|
|
||||||
"to remove the option. Got %s at discovery topic %s",
|
|
||||||
vacuum.DOMAIN,
|
|
||||||
config,
|
|
||||||
getattr(config, "discovery_data")["discovery_topic"],
|
|
||||||
)
|
|
||||||
return config
|
|
||||||
|
|
||||||
translation_key = "deprecation_mqtt_schema_vacuum_yaml"
|
|
||||||
hass = async_get_hass()
|
|
||||||
async_create_issue(
|
|
||||||
hass,
|
|
||||||
DOMAIN,
|
|
||||||
translation_key,
|
|
||||||
breaks_in_ha_version="2024.8.0",
|
|
||||||
is_fixable=False,
|
|
||||||
translation_key=translation_key,
|
|
||||||
learn_more_url=MQTT_VACUUM_DOCS_URL,
|
|
||||||
severity=IssueSeverity.WARNING,
|
|
||||||
)
|
|
||||||
return config
|
|
||||||
|
|
||||||
return _fail_legacy_config_callback
|
|
||||||
|
|
||||||
|
|
||||||
VACUUM_BASE_SCHEMA = MQTT_BASE_SCHEMA.extend(
|
VACUUM_BASE_SCHEMA = MQTT_BASE_SCHEMA.extend(
|
||||||
{
|
{
|
||||||
vol.Optional(CONF_FAN_SPEED_LIST, default=[]): vol.All(
|
vol.Optional(CONF_FAN_SPEED_LIST, default=[]): vol.All(
|
||||||
@ -227,15 +178,20 @@ VACUUM_BASE_SCHEMA = MQTT_BASE_SCHEMA.extend(
|
|||||||
).extend(MQTT_ENTITY_COMMON_SCHEMA.schema)
|
).extend(MQTT_ENTITY_COMMON_SCHEMA.schema)
|
||||||
|
|
||||||
DISCOVERY_SCHEMA = vol.All(
|
DISCOVERY_SCHEMA = vol.All(
|
||||||
_fail_legacy_config(discovery=True),
|
|
||||||
VACUUM_BASE_SCHEMA.extend({}, extra=vol.ALLOW_EXTRA),
|
VACUUM_BASE_SCHEMA.extend({}, extra=vol.ALLOW_EXTRA),
|
||||||
cv.deprecated(CONF_SCHEMA),
|
# Do not fail a config is the schema option is still present,
|
||||||
|
# De option was deprecated with HA Core 2024.2 and removed with HA Core 2024.8.
|
||||||
|
# As we allow extra options, and we will remove this check silently
|
||||||
|
# with HA Core 2025.8.0, we will only warn,
|
||||||
|
# if a adiscovery config still uses this option.
|
||||||
|
cv.removed(CONF_SCHEMA, raise_if_present=False),
|
||||||
)
|
)
|
||||||
|
|
||||||
PLATFORM_SCHEMA_MODERN = vol.All(
|
PLATFORM_SCHEMA_MODERN = vol.All(
|
||||||
_fail_legacy_config(discovery=False),
|
|
||||||
VACUUM_BASE_SCHEMA,
|
VACUUM_BASE_SCHEMA,
|
||||||
cv.deprecated(CONF_SCHEMA),
|
# The schema options was removed with HA Core 2024.8,
|
||||||
|
# the cleanup is planned for HA Core 2025.8.
|
||||||
|
cv.removed(CONF_SCHEMA, raise_if_present=True),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ DEFAULT_CONFIG = {mqtt.DOMAIN: {vacuum.DOMAIN: {"name": "test"}}}
|
|||||||
[
|
[
|
||||||
({mqtt.DOMAIN: {vacuum.DOMAIN: {"name": "test", "schema": "legacy"}}}, True),
|
({mqtt.DOMAIN: {vacuum.DOMAIN: {"name": "test", "schema": "legacy"}}}, True),
|
||||||
({mqtt.DOMAIN: {vacuum.DOMAIN: {"name": "test"}}}, False),
|
({mqtt.DOMAIN: {vacuum.DOMAIN: {"name": "test"}}}, False),
|
||||||
({mqtt.DOMAIN: {vacuum.DOMAIN: {"name": "test", "schema": "state"}}}, False),
|
({mqtt.DOMAIN: {vacuum.DOMAIN: {"name": "test", "schema": "state"}}}, True),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
async def test_removed_support_yaml(
|
async def test_removed_support_yaml(
|
||||||
@ -39,8 +39,8 @@ async def test_removed_support_yaml(
|
|||||||
if removed:
|
if removed:
|
||||||
assert entity is None
|
assert entity is None
|
||||||
assert (
|
assert (
|
||||||
"The support for the `legacy` MQTT "
|
"The 'schema' option has been removed, "
|
||||||
"vacuum schema has been removed" in caplog.text
|
"please remove it from your configuration" in caplog.text
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
assert entity is not None
|
assert entity is not None
|
||||||
@ -51,7 +51,7 @@ async def test_removed_support_yaml(
|
|||||||
[
|
[
|
||||||
({"name": "test", "schema": "legacy"}, True),
|
({"name": "test", "schema": "legacy"}, True),
|
||||||
({"name": "test"}, False),
|
({"name": "test"}, False),
|
||||||
({"name": "test", "schema": "state"}, False),
|
({"name": "test", "schema": "state"}, True),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
async def test_removed_support_discovery(
|
async def test_removed_support_discovery(
|
||||||
@ -69,12 +69,15 @@ async def test_removed_support_discovery(
|
|||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
entity = hass.states.get("vacuum.test")
|
entity = hass.states.get("vacuum.test")
|
||||||
|
assert entity is not None
|
||||||
|
|
||||||
if removed:
|
if removed:
|
||||||
assert entity is None
|
|
||||||
assert (
|
assert (
|
||||||
"The support for the `legacy` MQTT "
|
"The 'schema' option has been removed, "
|
||||||
"vacuum schema has been removed" in caplog.text
|
"please remove it from your configuration" in caplog.text
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
assert entity is not None
|
assert (
|
||||||
|
"The 'schema' option has been removed, "
|
||||||
|
"please remove it from your configuration" not in caplog.text
|
||||||
|
)
|
||||||
|
@ -119,16 +119,13 @@ async def test_warning_schema_option(
|
|||||||
await hass.async_block_till_done(wait_background_tasks=True)
|
await hass.async_block_till_done(wait_background_tasks=True)
|
||||||
|
|
||||||
state = hass.states.get("vacuum.test")
|
state = hass.states.get("vacuum.test")
|
||||||
|
# We do not fail if the schema option is still in the payload, but we log an error
|
||||||
assert state is not None
|
assert state is not None
|
||||||
with caplog.at_level(logging.WARNING):
|
with caplog.at_level(logging.WARNING):
|
||||||
assert (
|
assert (
|
||||||
"The `schema` option is deprecated for MQTT vacuum, but it was used in a "
|
"The 'schema' option has been removed, "
|
||||||
"discovery payload. Please contact the maintainer of the integration or "
|
"please remove it from your configuration" in caplog.text
|
||||||
"service that supplies the config, and suggest to remove the option."
|
|
||||||
in caplog.text
|
|
||||||
)
|
)
|
||||||
assert "https://example.com/support" in caplog.text
|
|
||||||
assert "at discovery topic homeassistant/vacuum/bla/config" in caplog.text
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("hass_config", [DEFAULT_CONFIG])
|
@pytest.mark.parametrize("hass_config", [DEFAULT_CONFIG])
|
||||||
|
Loading…
x
Reference in New Issue
Block a user