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})
Exemplo n.º 2
0
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(
Exemplo n.º 3
0
    """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."""
Exemplo n.º 4
0
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: