mirror of
https://github.com/home-assistant/core.git
synced 2025-07-26 22:57:17 +00:00
Use kwargs only for MQTT subentry PlatformField helper (#141498)
This commit is contained in:
parent
0f9fd78656
commit
13fc871806
@ -337,7 +337,7 @@ def validate_sensor_platform_config(
|
|||||||
return errors
|
return errors
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True)
|
@dataclass(frozen=True, kw_only=True)
|
||||||
class PlatformField:
|
class PlatformField:
|
||||||
"""Stores a platform config field schema, required flag and validator."""
|
"""Stores a platform config field schema, required flag and validator."""
|
||||||
|
|
||||||
@ -372,80 +372,132 @@ def unit_of_measurement_selector(user_data: dict[str, Any | None]) -> Selector:
|
|||||||
|
|
||||||
COMMON_ENTITY_FIELDS = {
|
COMMON_ENTITY_FIELDS = {
|
||||||
CONF_PLATFORM: PlatformField(
|
CONF_PLATFORM: PlatformField(
|
||||||
SUBENTRY_PLATFORM_SELECTOR, True, str, exclude_from_reconfig=True
|
selector=SUBENTRY_PLATFORM_SELECTOR,
|
||||||
|
required=True,
|
||||||
|
validator=str,
|
||||||
|
exclude_from_reconfig=True,
|
||||||
|
),
|
||||||
|
CONF_NAME: PlatformField(
|
||||||
|
selector=TEXT_SELECTOR,
|
||||||
|
required=False,
|
||||||
|
validator=str,
|
||||||
|
exclude_from_reconfig=True,
|
||||||
|
),
|
||||||
|
CONF_ENTITY_PICTURE: PlatformField(
|
||||||
|
selector=TEXT_SELECTOR, required=False, validator=cv.url, error="invalid_url"
|
||||||
),
|
),
|
||||||
CONF_NAME: PlatformField(TEXT_SELECTOR, False, str, exclude_from_reconfig=True),
|
|
||||||
CONF_ENTITY_PICTURE: PlatformField(TEXT_SELECTOR, False, cv.url, "invalid_url"),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PLATFORM_ENTITY_FIELDS = {
|
PLATFORM_ENTITY_FIELDS = {
|
||||||
Platform.NOTIFY.value: {},
|
Platform.NOTIFY.value: {},
|
||||||
Platform.SENSOR.value: {
|
Platform.SENSOR.value: {
|
||||||
CONF_DEVICE_CLASS: PlatformField(SENSOR_DEVICE_CLASS_SELECTOR, False, str),
|
CONF_DEVICE_CLASS: PlatformField(
|
||||||
CONF_STATE_CLASS: PlatformField(SENSOR_STATE_CLASS_SELECTOR, False, str),
|
selector=SENSOR_DEVICE_CLASS_SELECTOR, required=False, validator=str
|
||||||
|
),
|
||||||
|
CONF_STATE_CLASS: PlatformField(
|
||||||
|
selector=SENSOR_STATE_CLASS_SELECTOR, required=False, validator=str
|
||||||
|
),
|
||||||
CONF_UNIT_OF_MEASUREMENT: PlatformField(
|
CONF_UNIT_OF_MEASUREMENT: PlatformField(
|
||||||
unit_of_measurement_selector, False, str, custom_filtering=True
|
selector=unit_of_measurement_selector,
|
||||||
|
required=False,
|
||||||
|
validator=str,
|
||||||
|
custom_filtering=True,
|
||||||
),
|
),
|
||||||
CONF_SUGGESTED_DISPLAY_PRECISION: PlatformField(
|
CONF_SUGGESTED_DISPLAY_PRECISION: PlatformField(
|
||||||
SUGGESTED_DISPLAY_PRECISION_SELECTOR,
|
selector=SUGGESTED_DISPLAY_PRECISION_SELECTOR,
|
||||||
False,
|
required=False,
|
||||||
cv.positive_int,
|
validator=cv.positive_int,
|
||||||
section="advanced_settings",
|
section="advanced_settings",
|
||||||
),
|
),
|
||||||
CONF_OPTIONS: PlatformField(
|
CONF_OPTIONS: PlatformField(
|
||||||
OPTIONS_SELECTOR,
|
selector=OPTIONS_SELECTOR,
|
||||||
False,
|
required=False,
|
||||||
cv.ensure_list,
|
validator=cv.ensure_list,
|
||||||
conditions=({"device_class": "enum"},),
|
conditions=({"device_class": "enum"},),
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
Platform.SWITCH.value: {
|
Platform.SWITCH.value: {
|
||||||
CONF_DEVICE_CLASS: PlatformField(SWITCH_DEVICE_CLASS_SELECTOR, False, str),
|
CONF_DEVICE_CLASS: PlatformField(
|
||||||
|
selector=SWITCH_DEVICE_CLASS_SELECTOR, required=False, validator=str
|
||||||
|
),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
PLATFORM_MQTT_FIELDS = {
|
PLATFORM_MQTT_FIELDS = {
|
||||||
Platform.NOTIFY.value: {
|
Platform.NOTIFY.value: {
|
||||||
CONF_COMMAND_TOPIC: PlatformField(
|
CONF_COMMAND_TOPIC: PlatformField(
|
||||||
TEXT_SELECTOR, True, valid_publish_topic, "invalid_publish_topic"
|
selector=TEXT_SELECTOR,
|
||||||
|
required=True,
|
||||||
|
validator=valid_publish_topic,
|
||||||
|
error="invalid_publish_topic",
|
||||||
),
|
),
|
||||||
CONF_COMMAND_TEMPLATE: PlatformField(
|
CONF_COMMAND_TEMPLATE: PlatformField(
|
||||||
TEMPLATE_SELECTOR, False, cv.template, "invalid_template"
|
selector=TEMPLATE_SELECTOR,
|
||||||
|
required=False,
|
||||||
|
validator=cv.template,
|
||||||
|
error="invalid_template",
|
||||||
|
),
|
||||||
|
CONF_RETAIN: PlatformField(
|
||||||
|
selector=BOOLEAN_SELECTOR, required=False, validator=bool
|
||||||
),
|
),
|
||||||
CONF_RETAIN: PlatformField(BOOLEAN_SELECTOR, False, bool),
|
|
||||||
},
|
},
|
||||||
Platform.SENSOR.value: {
|
Platform.SENSOR.value: {
|
||||||
CONF_STATE_TOPIC: PlatformField(
|
CONF_STATE_TOPIC: PlatformField(
|
||||||
TEXT_SELECTOR, True, valid_subscribe_topic, "invalid_subscribe_topic"
|
selector=TEXT_SELECTOR,
|
||||||
|
required=True,
|
||||||
|
validator=valid_subscribe_topic,
|
||||||
|
error="invalid_subscribe_topic",
|
||||||
),
|
),
|
||||||
CONF_VALUE_TEMPLATE: PlatformField(
|
CONF_VALUE_TEMPLATE: PlatformField(
|
||||||
TEMPLATE_SELECTOR, False, cv.template, "invalid_template"
|
selector=TEMPLATE_SELECTOR,
|
||||||
|
required=False,
|
||||||
|
validator=cv.template,
|
||||||
|
error="invalid_template",
|
||||||
),
|
),
|
||||||
CONF_LAST_RESET_VALUE_TEMPLATE: PlatformField(
|
CONF_LAST_RESET_VALUE_TEMPLATE: PlatformField(
|
||||||
TEMPLATE_SELECTOR,
|
selector=TEMPLATE_SELECTOR,
|
||||||
False,
|
required=False,
|
||||||
cv.template,
|
validator=cv.template,
|
||||||
"invalid_template",
|
error="invalid_template",
|
||||||
conditions=({CONF_STATE_CLASS: "total"},),
|
conditions=({CONF_STATE_CLASS: "total"},),
|
||||||
),
|
),
|
||||||
CONF_EXPIRE_AFTER: PlatformField(
|
CONF_EXPIRE_AFTER: PlatformField(
|
||||||
EXPIRE_AFTER_SELECTOR, False, cv.positive_int, section="advanced_settings"
|
selector=EXPIRE_AFTER_SELECTOR,
|
||||||
|
required=False,
|
||||||
|
validator=cv.positive_int,
|
||||||
|
section="advanced_settings",
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
Platform.SWITCH.value: {
|
Platform.SWITCH.value: {
|
||||||
CONF_COMMAND_TOPIC: PlatformField(
|
CONF_COMMAND_TOPIC: PlatformField(
|
||||||
TEXT_SELECTOR, True, valid_publish_topic, "invalid_publish_topic"
|
selector=TEXT_SELECTOR,
|
||||||
|
required=True,
|
||||||
|
validator=valid_publish_topic,
|
||||||
|
error="invalid_publish_topic",
|
||||||
),
|
),
|
||||||
CONF_COMMAND_TEMPLATE: PlatformField(
|
CONF_COMMAND_TEMPLATE: PlatformField(
|
||||||
TEMPLATE_SELECTOR, False, cv.template, "invalid_template"
|
selector=TEMPLATE_SELECTOR,
|
||||||
|
required=False,
|
||||||
|
validator=cv.template,
|
||||||
|
error="invalid_template",
|
||||||
),
|
),
|
||||||
CONF_STATE_TOPIC: PlatformField(
|
CONF_STATE_TOPIC: PlatformField(
|
||||||
TEXT_SELECTOR, False, valid_subscribe_topic, "invalid_subscribe_topic"
|
selector=TEXT_SELECTOR,
|
||||||
|
required=False,
|
||||||
|
validator=valid_subscribe_topic,
|
||||||
|
error="invalid_subscribe_topic",
|
||||||
),
|
),
|
||||||
CONF_VALUE_TEMPLATE: PlatformField(
|
CONF_VALUE_TEMPLATE: PlatformField(
|
||||||
TEMPLATE_SELECTOR, False, cv.template, "invalid_template"
|
selector=TEMPLATE_SELECTOR,
|
||||||
|
required=False,
|
||||||
|
validator=cv.template,
|
||||||
|
error="invalid_template",
|
||||||
|
),
|
||||||
|
CONF_RETAIN: PlatformField(
|
||||||
|
selector=BOOLEAN_SELECTOR, required=False, validator=bool
|
||||||
|
),
|
||||||
|
CONF_OPTIMISTIC: PlatformField(
|
||||||
|
selector=BOOLEAN_SELECTOR, required=False, validator=bool
|
||||||
),
|
),
|
||||||
CONF_RETAIN: PlatformField(BOOLEAN_SELECTOR, False, bool),
|
|
||||||
CONF_OPTIMISTIC: PlatformField(BOOLEAN_SELECTOR, False, bool),
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
ENTITY_CONFIG_VALIDATOR: dict[
|
ENTITY_CONFIG_VALIDATOR: dict[
|
||||||
@ -458,14 +510,24 @@ ENTITY_CONFIG_VALIDATOR: dict[
|
|||||||
}
|
}
|
||||||
|
|
||||||
MQTT_DEVICE_PLATFORM_FIELDS = {
|
MQTT_DEVICE_PLATFORM_FIELDS = {
|
||||||
ATTR_NAME: PlatformField(TEXT_SELECTOR, False, str),
|
ATTR_NAME: PlatformField(selector=TEXT_SELECTOR, required=False, validator=str),
|
||||||
ATTR_SW_VERSION: PlatformField(TEXT_SELECTOR, False, str),
|
ATTR_SW_VERSION: PlatformField(
|
||||||
ATTR_HW_VERSION: PlatformField(TEXT_SELECTOR, False, str),
|
selector=TEXT_SELECTOR, required=False, validator=str
|
||||||
ATTR_MODEL: PlatformField(TEXT_SELECTOR, False, str),
|
),
|
||||||
ATTR_MODEL_ID: PlatformField(TEXT_SELECTOR, False, str),
|
ATTR_HW_VERSION: PlatformField(
|
||||||
ATTR_CONFIGURATION_URL: PlatformField(TEXT_SELECTOR, False, cv.url, "invalid_url"),
|
selector=TEXT_SELECTOR, required=False, validator=str
|
||||||
|
),
|
||||||
|
ATTR_MODEL: PlatformField(selector=TEXT_SELECTOR, required=False, validator=str),
|
||||||
|
ATTR_MODEL_ID: PlatformField(selector=TEXT_SELECTOR, required=False, validator=str),
|
||||||
|
ATTR_CONFIGURATION_URL: PlatformField(
|
||||||
|
selector=TEXT_SELECTOR, required=False, validator=cv.url, error="invalid_url"
|
||||||
|
),
|
||||||
CONF_QOS: PlatformField(
|
CONF_QOS: PlatformField(
|
||||||
QOS_SELECTOR, False, int, default=DEFAULT_QOS, section="mqtt_settings"
|
selector=QOS_SELECTOR,
|
||||||
|
required=False,
|
||||||
|
validator=int,
|
||||||
|
default=DEFAULT_QOS,
|
||||||
|
section="mqtt_settings",
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user