mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 21:27:38 +00:00
Cleanup ENTITY_CATEGORIES_SCHEMA (#66549)
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io> Co-authored-by: epenet <epenet@users.noreply.github.com>
This commit is contained in:
parent
330c931067
commit
4c7e1fe060
@ -31,7 +31,7 @@ from homeassistant.const import (
|
|||||||
Platform,
|
Platform,
|
||||||
)
|
)
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
from homeassistant.helpers.entity import validate_entity_category
|
from homeassistant.helpers.entity import ENTITY_CATEGORIES_SCHEMA
|
||||||
|
|
||||||
from .const import (
|
from .const import (
|
||||||
CONF_INVERT,
|
CONF_INVERT,
|
||||||
@ -262,7 +262,7 @@ class BinarySensorSchema(KNXPlatformSchema):
|
|||||||
),
|
),
|
||||||
vol.Optional(CONF_DEVICE_CLASS): BINARY_SENSOR_DEVICE_CLASSES_SCHEMA,
|
vol.Optional(CONF_DEVICE_CLASS): BINARY_SENSOR_DEVICE_CLASSES_SCHEMA,
|
||||||
vol.Optional(CONF_RESET_AFTER): cv.positive_float,
|
vol.Optional(CONF_RESET_AFTER): cv.positive_float,
|
||||||
vol.Optional(CONF_ENTITY_CATEGORY): validate_entity_category,
|
vol.Optional(CONF_ENTITY_CATEGORY): ENTITY_CATEGORIES_SCHEMA,
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
@ -298,7 +298,7 @@ class ButtonSchema(KNXPlatformSchema):
|
|||||||
vol.Exclusive(
|
vol.Exclusive(
|
||||||
CONF_TYPE, "length_or_type", msg=length_or_type_msg
|
CONF_TYPE, "length_or_type", msg=length_or_type_msg
|
||||||
): object,
|
): object,
|
||||||
vol.Optional(CONF_ENTITY_CATEGORY): validate_entity_category,
|
vol.Optional(CONF_ENTITY_CATEGORY): ENTITY_CATEGORIES_SCHEMA,
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
vol.Any(
|
vol.Any(
|
||||||
@ -442,7 +442,7 @@ class ClimateSchema(KNXPlatformSchema):
|
|||||||
): vol.In(HVAC_MODES),
|
): vol.In(HVAC_MODES),
|
||||||
vol.Optional(CONF_MIN_TEMP): vol.Coerce(float),
|
vol.Optional(CONF_MIN_TEMP): vol.Coerce(float),
|
||||||
vol.Optional(CONF_MAX_TEMP): vol.Coerce(float),
|
vol.Optional(CONF_MAX_TEMP): vol.Coerce(float),
|
||||||
vol.Optional(CONF_ENTITY_CATEGORY): validate_entity_category,
|
vol.Optional(CONF_ENTITY_CATEGORY): ENTITY_CATEGORIES_SCHEMA,
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
@ -497,7 +497,7 @@ class CoverSchema(KNXPlatformSchema):
|
|||||||
vol.Optional(CONF_INVERT_POSITION, default=False): cv.boolean,
|
vol.Optional(CONF_INVERT_POSITION, default=False): cv.boolean,
|
||||||
vol.Optional(CONF_INVERT_ANGLE, default=False): cv.boolean,
|
vol.Optional(CONF_INVERT_ANGLE, default=False): cv.boolean,
|
||||||
vol.Optional(CONF_DEVICE_CLASS): COVER_DEVICE_CLASSES_SCHEMA,
|
vol.Optional(CONF_DEVICE_CLASS): COVER_DEVICE_CLASSES_SCHEMA,
|
||||||
vol.Optional(CONF_ENTITY_CATEGORY): validate_entity_category,
|
vol.Optional(CONF_ENTITY_CATEGORY): ENTITY_CATEGORIES_SCHEMA,
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
@ -560,7 +560,7 @@ class FanSchema(KNXPlatformSchema):
|
|||||||
vol.Optional(CONF_OSCILLATION_ADDRESS): ga_list_validator,
|
vol.Optional(CONF_OSCILLATION_ADDRESS): ga_list_validator,
|
||||||
vol.Optional(CONF_OSCILLATION_STATE_ADDRESS): ga_list_validator,
|
vol.Optional(CONF_OSCILLATION_STATE_ADDRESS): ga_list_validator,
|
||||||
vol.Optional(CONF_MAX_STEP): cv.byte,
|
vol.Optional(CONF_MAX_STEP): cv.byte,
|
||||||
vol.Optional(CONF_ENTITY_CATEGORY): validate_entity_category,
|
vol.Optional(CONF_ENTITY_CATEGORY): ENTITY_CATEGORIES_SCHEMA,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -664,7 +664,7 @@ class LightSchema(KNXPlatformSchema):
|
|||||||
vol.Optional(CONF_MAX_KELVIN, default=DEFAULT_MAX_KELVIN): vol.All(
|
vol.Optional(CONF_MAX_KELVIN, default=DEFAULT_MAX_KELVIN): vol.All(
|
||||||
vol.Coerce(int), vol.Range(min=1)
|
vol.Coerce(int), vol.Range(min=1)
|
||||||
),
|
),
|
||||||
vol.Optional(CONF_ENTITY_CATEGORY): validate_entity_category,
|
vol.Optional(CONF_ENTITY_CATEGORY): ENTITY_CATEGORIES_SCHEMA,
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
vol.Any(
|
vol.Any(
|
||||||
@ -744,7 +744,7 @@ class NumberSchema(KNXPlatformSchema):
|
|||||||
vol.Optional(CONF_MAX): vol.Coerce(float),
|
vol.Optional(CONF_MAX): vol.Coerce(float),
|
||||||
vol.Optional(CONF_MIN): vol.Coerce(float),
|
vol.Optional(CONF_MIN): vol.Coerce(float),
|
||||||
vol.Optional(CONF_STEP): cv.positive_float,
|
vol.Optional(CONF_STEP): cv.positive_float,
|
||||||
vol.Optional(CONF_ENTITY_CATEGORY): validate_entity_category,
|
vol.Optional(CONF_ENTITY_CATEGORY): ENTITY_CATEGORIES_SCHEMA,
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
number_limit_sub_validator,
|
number_limit_sub_validator,
|
||||||
@ -766,7 +766,7 @@ class SceneSchema(KNXPlatformSchema):
|
|||||||
vol.Required(CONF_SCENE_NUMBER): vol.All(
|
vol.Required(CONF_SCENE_NUMBER): vol.All(
|
||||||
vol.Coerce(int), vol.Range(min=1, max=64)
|
vol.Coerce(int), vol.Range(min=1, max=64)
|
||||||
),
|
),
|
||||||
vol.Optional(CONF_ENTITY_CATEGORY): validate_entity_category,
|
vol.Optional(CONF_ENTITY_CATEGORY): ENTITY_CATEGORIES_SCHEMA,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -797,7 +797,7 @@ class SelectSchema(KNXPlatformSchema):
|
|||||||
],
|
],
|
||||||
vol.Required(KNX_ADDRESS): ga_list_validator,
|
vol.Required(KNX_ADDRESS): ga_list_validator,
|
||||||
vol.Optional(CONF_STATE_ADDRESS): ga_list_validator,
|
vol.Optional(CONF_STATE_ADDRESS): ga_list_validator,
|
||||||
vol.Optional(CONF_ENTITY_CATEGORY): validate_entity_category,
|
vol.Optional(CONF_ENTITY_CATEGORY): ENTITY_CATEGORIES_SCHEMA,
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
select_options_sub_validator,
|
select_options_sub_validator,
|
||||||
@ -822,7 +822,7 @@ class SensorSchema(KNXPlatformSchema):
|
|||||||
vol.Optional(CONF_STATE_CLASS): STATE_CLASSES_SCHEMA,
|
vol.Optional(CONF_STATE_CLASS): STATE_CLASSES_SCHEMA,
|
||||||
vol.Required(CONF_TYPE): sensor_type_validator,
|
vol.Required(CONF_TYPE): sensor_type_validator,
|
||||||
vol.Required(CONF_STATE_ADDRESS): ga_list_validator,
|
vol.Required(CONF_STATE_ADDRESS): ga_list_validator,
|
||||||
vol.Optional(CONF_ENTITY_CATEGORY): validate_entity_category,
|
vol.Optional(CONF_ENTITY_CATEGORY): ENTITY_CATEGORIES_SCHEMA,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -843,7 +843,7 @@ class SwitchSchema(KNXPlatformSchema):
|
|||||||
vol.Optional(CONF_RESPOND_TO_READ, default=False): cv.boolean,
|
vol.Optional(CONF_RESPOND_TO_READ, default=False): cv.boolean,
|
||||||
vol.Required(KNX_ADDRESS): ga_list_validator,
|
vol.Required(KNX_ADDRESS): ga_list_validator,
|
||||||
vol.Optional(CONF_STATE_ADDRESS): ga_list_validator,
|
vol.Optional(CONF_STATE_ADDRESS): ga_list_validator,
|
||||||
vol.Optional(CONF_ENTITY_CATEGORY): validate_entity_category,
|
vol.Optional(CONF_ENTITY_CATEGORY): ENTITY_CATEGORIES_SCHEMA,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -890,7 +890,7 @@ class WeatherSchema(KNXPlatformSchema):
|
|||||||
vol.Optional(CONF_KNX_DAY_NIGHT_ADDRESS): ga_list_validator,
|
vol.Optional(CONF_KNX_DAY_NIGHT_ADDRESS): ga_list_validator,
|
||||||
vol.Optional(CONF_KNX_AIR_PRESSURE_ADDRESS): ga_list_validator,
|
vol.Optional(CONF_KNX_AIR_PRESSURE_ADDRESS): ga_list_validator,
|
||||||
vol.Optional(CONF_KNX_HUMIDITY_ADDRESS): ga_list_validator,
|
vol.Optional(CONF_KNX_HUMIDITY_ADDRESS): ga_list_validator,
|
||||||
vol.Optional(CONF_ENTITY_CATEGORY): validate_entity_category,
|
vol.Optional(CONF_ENTITY_CATEGORY): ENTITY_CATEGORIES_SCHEMA,
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
@ -45,7 +45,7 @@ from homeassistant.helpers import (
|
|||||||
template,
|
template,
|
||||||
)
|
)
|
||||||
from homeassistant.helpers.dispatcher import async_dispatcher_send
|
from homeassistant.helpers.dispatcher import async_dispatcher_send
|
||||||
from homeassistant.helpers.entity import validate_entity_category
|
from homeassistant.helpers.entity import ENTITY_CATEGORIES_SCHEMA
|
||||||
from homeassistant.util.decorator import Registry
|
from homeassistant.util.decorator import Registry
|
||||||
|
|
||||||
from .const import (
|
from .const import (
|
||||||
@ -446,7 +446,7 @@ def _validate_state_class_sensor(value: dict):
|
|||||||
vol.Optional(ATTR_SENSOR_STATE, default=None): vol.Any(
|
vol.Optional(ATTR_SENSOR_STATE, default=None): vol.Any(
|
||||||
None, bool, str, int, float
|
None, bool, str, int, float
|
||||||
),
|
),
|
||||||
vol.Optional(ATTR_SENSOR_ENTITY_CATEGORY): validate_entity_category,
|
vol.Optional(ATTR_SENSOR_ENTITY_CATEGORY): ENTITY_CATEGORIES_SCHEMA,
|
||||||
vol.Optional(ATTR_SENSOR_ICON, default="mdi:cellphone"): cv.icon,
|
vol.Optional(ATTR_SENSOR_ICON, default="mdi:cellphone"): cv.icon,
|
||||||
vol.Optional(ATTR_SENSOR_STATE_CLASS): vol.In(SENSOSR_STATE_CLASSES),
|
vol.Optional(ATTR_SENSOR_STATE_CLASS): vol.In(SENSOSR_STATE_CLASSES),
|
||||||
},
|
},
|
||||||
|
@ -37,11 +37,11 @@ from homeassistant.helpers.dispatcher import (
|
|||||||
async_dispatcher_send,
|
async_dispatcher_send,
|
||||||
)
|
)
|
||||||
from homeassistant.helpers.entity import (
|
from homeassistant.helpers.entity import (
|
||||||
|
ENTITY_CATEGORIES_SCHEMA,
|
||||||
DeviceInfo,
|
DeviceInfo,
|
||||||
Entity,
|
Entity,
|
||||||
EntityCategory,
|
EntityCategory,
|
||||||
async_generate_entity_id,
|
async_generate_entity_id,
|
||||||
validate_entity_category,
|
|
||||||
)
|
)
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
from homeassistant.helpers.reload import async_setup_reload_service
|
from homeassistant.helpers.reload import async_setup_reload_service
|
||||||
@ -212,7 +212,7 @@ MQTT_ENTITY_COMMON_SCHEMA = MQTT_AVAILABILITY_SCHEMA.extend(
|
|||||||
{
|
{
|
||||||
vol.Optional(CONF_DEVICE): MQTT_ENTITY_DEVICE_INFO_SCHEMA,
|
vol.Optional(CONF_DEVICE): MQTT_ENTITY_DEVICE_INFO_SCHEMA,
|
||||||
vol.Optional(CONF_ENABLED_BY_DEFAULT, default=True): cv.boolean,
|
vol.Optional(CONF_ENABLED_BY_DEFAULT, default=True): cv.boolean,
|
||||||
vol.Optional(CONF_ENTITY_CATEGORY): validate_entity_category,
|
vol.Optional(CONF_ENTITY_CATEGORY): ENTITY_CATEGORIES_SCHEMA,
|
||||||
vol.Optional(CONF_ICON): cv.icon,
|
vol.Optional(CONF_ICON): cv.icon,
|
||||||
vol.Optional(CONF_JSON_ATTRS_TOPIC): valid_subscribe_topic,
|
vol.Optional(CONF_JSON_ATTRS_TOPIC): valid_subscribe_topic,
|
||||||
vol.Optional(CONF_JSON_ATTRS_TEMPLATE): cv.template,
|
vol.Optional(CONF_JSON_ATTRS_TEMPLATE): cv.template,
|
||||||
|
@ -12,7 +12,7 @@ import logging
|
|||||||
import math
|
import math
|
||||||
import sys
|
import sys
|
||||||
from timeit import default_timer as timer
|
from timeit import default_timer as timer
|
||||||
from typing import Any, Literal, TypedDict, final
|
from typing import Any, Final, Literal, TypedDict, final
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
@ -28,7 +28,6 @@ from homeassistant.const import (
|
|||||||
ATTR_SUPPORTED_FEATURES,
|
ATTR_SUPPORTED_FEATURES,
|
||||||
ATTR_UNIT_OF_MEASUREMENT,
|
ATTR_UNIT_OF_MEASUREMENT,
|
||||||
DEVICE_DEFAULT_NAME,
|
DEVICE_DEFAULT_NAME,
|
||||||
ENTITY_CATEGORIES,
|
|
||||||
STATE_OFF,
|
STATE_OFF,
|
||||||
STATE_ON,
|
STATE_ON,
|
||||||
STATE_UNAVAILABLE,
|
STATE_UNAVAILABLE,
|
||||||
@ -65,15 +64,6 @@ SOURCE_PLATFORM_CONFIG = "platform_config"
|
|||||||
FLOAT_PRECISION = abs(int(math.floor(math.log10(abs(sys.float_info.epsilon))))) - 1
|
FLOAT_PRECISION = abs(int(math.floor(math.log10(abs(sys.float_info.epsilon))))) - 1
|
||||||
|
|
||||||
|
|
||||||
def validate_entity_category(value: Any | None) -> EntityCategory:
|
|
||||||
"""Validate entity category configuration."""
|
|
||||||
value = vol.In(ENTITY_CATEGORIES)(value)
|
|
||||||
return EntityCategory(value)
|
|
||||||
|
|
||||||
|
|
||||||
ENTITY_CATEGORIES_SCHEMA = validate_entity_category
|
|
||||||
|
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
@bind_hass
|
@bind_hass
|
||||||
def entity_sources(hass: HomeAssistant) -> dict[str, dict[str, str]]:
|
def entity_sources(hass: HomeAssistant) -> dict[str, dict[str, str]]:
|
||||||
@ -214,6 +204,9 @@ class EntityCategory(StrEnum):
|
|||||||
SYSTEM = "system"
|
SYSTEM = "system"
|
||||||
|
|
||||||
|
|
||||||
|
ENTITY_CATEGORIES_SCHEMA: Final = vol.Coerce(EntityCategory)
|
||||||
|
|
||||||
|
|
||||||
class EntityPlatformState(Enum):
|
class EntityPlatformState(Enum):
|
||||||
"""The platform state of an entity."""
|
"""The platform state of an entity."""
|
||||||
|
|
||||||
|
@ -927,5 +927,8 @@ def test_entity_category_schema(value, expected):
|
|||||||
def test_entity_category_schema_error(value):
|
def test_entity_category_schema_error(value):
|
||||||
"""Test entity category schema."""
|
"""Test entity category schema."""
|
||||||
schema = vol.Schema(entity.ENTITY_CATEGORIES_SCHEMA)
|
schema = vol.Schema(entity.ENTITY_CATEGORIES_SCHEMA)
|
||||||
with pytest.raises(vol.Invalid):
|
with pytest.raises(
|
||||||
|
vol.Invalid,
|
||||||
|
match=r"expected EntityCategory or one of 'config', 'diagnostic', 'system'",
|
||||||
|
):
|
||||||
schema(value)
|
schema(value)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user