mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 21:27:38 +00:00
Refactor MQTT_WILL_BIRTH_SCHEMA (#81879)
* Refactor MQTT_WILL_BIRTH_SCHEMA * Refactor and move birth/will validation to utils * Simplify birth will validation
This commit is contained in:
parent
9bd676aff6
commit
7500d0c61c
@ -95,12 +95,12 @@ from .models import ( # noqa: F401
|
||||
ReceivePayloadType,
|
||||
)
|
||||
from .util import (
|
||||
_VALID_QOS_SCHEMA,
|
||||
async_create_certificate_temp_files,
|
||||
get_mqtt_data,
|
||||
migrate_certificate_file_to_content,
|
||||
mqtt_config_entry_enabled,
|
||||
valid_publish_topic,
|
||||
valid_qos_schema,
|
||||
valid_subscribe_topic,
|
||||
)
|
||||
|
||||
@ -172,7 +172,7 @@ MQTT_PUBLISH_SCHEMA = vol.All(
|
||||
vol.Exclusive(ATTR_TOPIC_TEMPLATE, CONF_TOPIC): cv.string,
|
||||
vol.Exclusive(ATTR_PAYLOAD, CONF_PAYLOAD): cv.string,
|
||||
vol.Exclusive(ATTR_PAYLOAD_TEMPLATE, CONF_PAYLOAD): cv.string,
|
||||
vol.Optional(ATTR_QOS, default=DEFAULT_QOS): _VALID_QOS_SCHEMA,
|
||||
vol.Optional(ATTR_QOS, default=DEFAULT_QOS): valid_qos_schema,
|
||||
vol.Optional(ATTR_RETAIN, default=DEFAULT_RETAIN): cv.boolean,
|
||||
},
|
||||
required=True,
|
||||
|
@ -16,10 +16,10 @@ from .const import (
|
||||
DEFAULT_QOS,
|
||||
DEFAULT_RETAIN,
|
||||
)
|
||||
from .util import _VALID_QOS_SCHEMA, valid_publish_topic, valid_subscribe_topic
|
||||
from .util import valid_publish_topic, valid_qos_schema, valid_subscribe_topic
|
||||
|
||||
SCHEMA_BASE = {
|
||||
vol.Optional(CONF_QOS, default=DEFAULT_QOS): _VALID_QOS_SCHEMA,
|
||||
vol.Optional(CONF_QOS, default=DEFAULT_QOS): valid_qos_schema,
|
||||
vol.Optional(CONF_ENCODING, default=DEFAULT_ENCODING): cv.string,
|
||||
}
|
||||
|
||||
|
@ -71,9 +71,9 @@ from .const import (
|
||||
SUPPORTED_PROTOCOLS,
|
||||
)
|
||||
from .util import (
|
||||
MQTT_WILL_BIRTH_SCHEMA,
|
||||
async_create_certificate_temp_files,
|
||||
get_file_path,
|
||||
valid_birth_will,
|
||||
valid_publish_topic,
|
||||
)
|
||||
|
||||
@ -326,7 +326,7 @@ class MQTTOptionsFlowHandler(config_entries.OptionsFlow):
|
||||
CONF_BIRTH_MESSAGE,
|
||||
_birth_will("birth"),
|
||||
"bad_birth",
|
||||
MQTT_WILL_BIRTH_SCHEMA,
|
||||
valid_birth_will,
|
||||
)
|
||||
if not user_input["birth_enable"]:
|
||||
options_config[CONF_BIRTH_MESSAGE] = {}
|
||||
@ -336,7 +336,7 @@ class MQTTOptionsFlowHandler(config_entries.OptionsFlow):
|
||||
CONF_WILL_MESSAGE,
|
||||
_birth_will("will"),
|
||||
"bad_will",
|
||||
MQTT_WILL_BIRTH_SCHEMA,
|
||||
valid_birth_will,
|
||||
)
|
||||
if not user_input["will_enable"]:
|
||||
options_config[CONF_WILL_MESSAGE] = {}
|
||||
|
@ -36,10 +36,6 @@ from . import (
|
||||
vacuum as vacuum_platform,
|
||||
)
|
||||
from .const import (
|
||||
ATTR_PAYLOAD,
|
||||
ATTR_QOS,
|
||||
ATTR_RETAIN,
|
||||
ATTR_TOPIC,
|
||||
CONF_BIRTH_MESSAGE,
|
||||
CONF_BROKER,
|
||||
CONF_CERTIFICATE,
|
||||
@ -56,12 +52,10 @@ from .const import (
|
||||
DEFAULT_PORT,
|
||||
DEFAULT_PREFIX,
|
||||
DEFAULT_PROTOCOL,
|
||||
DEFAULT_QOS,
|
||||
DEFAULT_RETAIN,
|
||||
DEFAULT_WILL,
|
||||
SUPPORTED_PROTOCOLS,
|
||||
)
|
||||
from .util import _VALID_QOS_SCHEMA, valid_publish_topic
|
||||
from .util import valid_birth_will, valid_publish_topic
|
||||
|
||||
DEFAULT_TLS_PROTOCOL = "auto"
|
||||
|
||||
@ -144,16 +138,6 @@ CLIENT_KEY_AUTH_MSG = (
|
||||
"the MQTT broker configuration"
|
||||
)
|
||||
|
||||
MQTT_WILL_BIRTH_SCHEMA = vol.Schema(
|
||||
{
|
||||
vol.Inclusive(ATTR_TOPIC, "topic_payload"): valid_publish_topic,
|
||||
vol.Inclusive(ATTR_PAYLOAD, "topic_payload"): cv.string,
|
||||
vol.Optional(ATTR_QOS, default=DEFAULT_QOS): _VALID_QOS_SCHEMA,
|
||||
vol.Optional(ATTR_RETAIN, default=DEFAULT_RETAIN): cv.boolean,
|
||||
},
|
||||
required=True,
|
||||
)
|
||||
|
||||
CONFIG_SCHEMA_ENTRY = vol.Schema(
|
||||
{
|
||||
vol.Optional(CONF_CLIENT_ID): cv.string,
|
||||
@ -170,8 +154,8 @@ CONFIG_SCHEMA_ENTRY = vol.Schema(
|
||||
vol.Optional(CONF_TLS_INSECURE): cv.boolean,
|
||||
vol.Optional(CONF_TLS_VERSION): vol.Any("auto", "1.0", "1.1", "1.2"),
|
||||
vol.Optional(CONF_PROTOCOL): vol.All(cv.string, vol.In(SUPPORTED_PROTOCOLS)),
|
||||
vol.Optional(CONF_WILL_MESSAGE): MQTT_WILL_BIRTH_SCHEMA,
|
||||
vol.Optional(CONF_BIRTH_MESSAGE): MQTT_WILL_BIRTH_SCHEMA,
|
||||
vol.Optional(CONF_WILL_MESSAGE): valid_birth_will,
|
||||
vol.Optional(CONF_BIRTH_MESSAGE): valid_birth_will,
|
||||
vol.Optional(CONF_DISCOVERY): cv.boolean,
|
||||
# discovery_prefix must be a valid publish topic because if no
|
||||
# state topic is specified, it will be created with the given prefix.
|
||||
@ -197,8 +181,8 @@ CONFIG_SCHEMA_BASE = PLATFORM_CONFIG_SCHEMA_BASE.extend(
|
||||
vol.Optional(CONF_TLS_INSECURE): cv.boolean,
|
||||
vol.Optional(CONF_TLS_VERSION): vol.Any("auto", "1.0", "1.1", "1.2"),
|
||||
vol.Optional(CONF_PROTOCOL): vol.All(cv.string, vol.In(SUPPORTED_PROTOCOLS)),
|
||||
vol.Optional(CONF_WILL_MESSAGE): MQTT_WILL_BIRTH_SCHEMA,
|
||||
vol.Optional(CONF_BIRTH_MESSAGE): MQTT_WILL_BIRTH_SCHEMA,
|
||||
vol.Optional(CONF_WILL_MESSAGE): valid_birth_will,
|
||||
vol.Optional(CONF_BIRTH_MESSAGE): valid_birth_will,
|
||||
vol.Optional(CONF_DISCOVERY): cv.boolean,
|
||||
# discovery_prefix must be a valid publish topic because if no
|
||||
# state topic is specified, it will be created with the given prefix.
|
||||
|
@ -9,7 +9,6 @@ from typing import Any
|
||||
|
||||
import voluptuous as vol
|
||||
|
||||
from homeassistant.const import CONF_PAYLOAD
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers import config_validation as cv, template
|
||||
from homeassistant.helpers.typing import ConfigType
|
||||
@ -32,6 +31,8 @@ from .models import MqttData
|
||||
|
||||
TEMP_DIR_NAME = f"home-assistant-{DOMAIN}"
|
||||
|
||||
_VALID_QOS_SCHEMA = vol.All(vol.Coerce(int), vol.In([0, 1, 2]))
|
||||
|
||||
|
||||
def mqtt_config_entry_enabled(hass: HomeAssistant) -> bool | None:
|
||||
"""Return true when the MQTT config entry is enabled."""
|
||||
@ -112,19 +113,29 @@ def valid_publish_topic(topic: Any) -> str:
|
||||
return validated_topic
|
||||
|
||||
|
||||
_VALID_QOS_SCHEMA = vol.All(vol.Coerce(int), vol.In([0, 1, 2]))
|
||||
def valid_qos_schema(qos: Any) -> int:
|
||||
"""Validate that QOS value is valid."""
|
||||
return _VALID_QOS_SCHEMA(qos)
|
||||
|
||||
MQTT_WILL_BIRTH_SCHEMA = vol.Schema(
|
||||
|
||||
_MQTT_WILL_BIRTH_SCHEMA = vol.Schema(
|
||||
{
|
||||
vol.Required(ATTR_TOPIC): valid_publish_topic,
|
||||
vol.Required(ATTR_PAYLOAD, CONF_PAYLOAD): cv.string,
|
||||
vol.Optional(ATTR_QOS, default=DEFAULT_QOS): _VALID_QOS_SCHEMA,
|
||||
vol.Required(ATTR_PAYLOAD): cv.string,
|
||||
vol.Optional(ATTR_QOS, default=DEFAULT_QOS): valid_qos_schema,
|
||||
vol.Optional(ATTR_RETAIN, default=DEFAULT_RETAIN): cv.boolean,
|
||||
},
|
||||
required=True,
|
||||
)
|
||||
|
||||
|
||||
def valid_birth_will(config: ConfigType) -> ConfigType:
|
||||
"""Validate a birth or will configuration and required topic/payload."""
|
||||
if config:
|
||||
config = _MQTT_WILL_BIRTH_SCHEMA(config)
|
||||
return config
|
||||
|
||||
|
||||
def get_mqtt_data(hass: HomeAssistant, ensure_exists: bool = False) -> MqttData:
|
||||
"""Return typed MqttData from hass.data[DATA_MQTT]."""
|
||||
if ensure_exists:
|
||||
|
Loading…
x
Reference in New Issue
Block a user