def test_key_value_schemas(): """Test key value schemas.""" schema = vol.Schema( cv.key_value_schemas( "mode", { "number": vol.Schema({"mode": "number", "data": int}), "string": vol.Schema({"mode": "string", "data": str}), }, ) ) with pytest.raises(vol.Invalid) as excinfo: schema(True) assert str(excinfo.value) == "Expected a dictionary" for mode in None, "invalid": with pytest.raises(vol.Invalid) as excinfo: schema({"mode": mode}) assert ( str(excinfo.value) == f"Unexpected value for mode: '{mode}'. Expected number, string" ) with pytest.raises(vol.Invalid) as excinfo: schema({"mode": "number", "data": "string-value"}) assert str(excinfo.value) == "expected int for dictionary value @ data['data']" with pytest.raises(vol.Invalid) as excinfo: schema({"mode": "string", "data": 1}) assert str(excinfo.value) == "expected str for dictionary value @ data['data']" for mode, data in (("number", 1), ("string", "hello")): schema({"mode": mode, "data": data})
PLATFORM_SCHEMA = vol.All( cv.has_at_least_one_key(CONF_DESTINATION_LATITUDE, CONF_DESTINATION_ENTITY_ID), cv.has_at_least_one_key(CONF_ORIGIN_LATITUDE, CONF_ORIGIN_ENTITY_ID), cv.key_value_schemas( CONF_MODE, { None: PLATFORM_SCHEMA, TRAVEL_MODE_BICYCLE: PLATFORM_SCHEMA, TRAVEL_MODE_CAR: PLATFORM_SCHEMA, TRAVEL_MODE_PEDESTRIAN: PLATFORM_SCHEMA, TRAVEL_MODE_PUBLIC: PLATFORM_SCHEMA, TRAVEL_MODE_TRUCK: PLATFORM_SCHEMA, TRAVEL_MODE_PUBLIC_TIME_TABLE: PLATFORM_SCHEMA.extend({ vol.Exclusive(CONF_ARRIVAL, "arrival_departure"): cv.time, vol.Exclusive(CONF_DEPARTURE, "arrival_departure"): cv.time, }), }, ), ) async def async_setup_platform(
"""Validate that we don't have too many of certain types.""" types = Counter([val["type"] for val in value]) if types.get("grid", 0) > 1: raise vol.Invalid("You cannot have more than 1 grid source") return value ENERGY_SOURCE_SCHEMA = vol.All( vol.Schema([ cv.key_value_schemas( "type", { "grid": GRID_SOURCE_SCHEMA, "solar": SOLAR_SOURCE_SCHEMA, "battery": BATTERY_SOURCE_SCHEMA, "gas": GAS_SOURCE_SCHEMA, }, ) ]), check_type_limits, ) DEVICE_CONSUMPTION_SCHEMA = vol.Schema({ vol.Required("stat_consumption"): str, }) class EnergyManager: """Manage the instance energy prefs."""
def check_type_limits(value: list[SourceType]) -> list[SourceType]: """Validate that we don't have too many of certain types.""" types = Counter([val["type"] for val in value]) if types.get("grid", 0) > 1: raise vol.Invalid("You cannot have more than 1 grid source") return value ENERGY_SOURCE_SCHEMA = vol.All( vol.Schema([ cv.key_value_schemas( "type", { "grid": GRID_SOURCE_SCHEMA, "solar": SOLAR_SOURCE_SCHEMA, }, ) ]), check_type_limits, ) DEVICE_CONSUMPTION_SCHEMA = vol.Schema({ vol.Required("stat_consumption"): str, }) class EnergyManager: """Manage the instance energy prefs.""" def __init__(self, hass: HomeAssistant) -> None: