Reduce modbus validator by using table (#103488)

This commit is contained in:
jan iversen 2023-11-08 09:55:00 +01:00 committed by GitHub
parent 8e9528d34d
commit 40dc6d8191
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 19 deletions

View File

@ -98,27 +98,22 @@ def struct_validator(config: dict[str, Any]) -> dict[str, Any]:
data_type = config[CONF_DATA_TYPE] = DataType.INT16
count = config.get(CONF_COUNT, None)
structure = config.get(CONF_STRUCTURE, None)
slave_count = config.get(CONF_SLAVE_COUNT, None)
slave_name = CONF_SLAVE_COUNT
if not slave_count:
slave_count = config.get(CONF_VIRTUAL_COUNT, 0)
slave_name = CONF_VIRTUAL_COUNT
slave_count = config.get(CONF_SLAVE_COUNT, config.get(CONF_VIRTUAL_COUNT, 0))
swap_type = config.get(CONF_SWAP, CONF_SWAP_NONE)
validator = DEFAULT_STRUCT_FORMAT[data_type].validate_parm
if count and not validator.count:
error = f"{name}: `{CONF_COUNT}: {count}` cannot be combined with `{CONF_DATA_TYPE}: {data_type}`"
raise vol.Invalid(error)
if not count and validator.count:
error = f"{name}: `{CONF_COUNT}:` missing, demanded with `{CONF_DATA_TYPE}: {data_type}`"
raise vol.Invalid(error)
if structure and not validator.structure:
error = f"{name}: `{CONF_STRUCTURE}: {structure}` cannot be combined with `{CONF_DATA_TYPE}: {data_type}`"
raise vol.Invalid(error)
if not structure and validator.structure:
error = f"{name}: `{CONF_STRUCTURE}` missing or empty, demanded with `{CONF_DATA_TYPE}: {data_type}`"
raise vol.Invalid(error)
for entry in (
(count, validator.count, CONF_COUNT),
(structure, validator.structure, CONF_STRUCTURE),
):
if bool(entry[0]) != entry[1]:
error = "cannot be combined" if not entry[1] else "missing, demanded"
error = (
f"{name}: `{entry[2]}:` {error} with `{CONF_DATA_TYPE}: {data_type}`"
)
raise vol.Invalid(error)
if slave_count and not validator.slave_count:
error = f"{name}: `{slave_name}: {slave_count}` cannot be combined with `{CONF_DATA_TYPE}: {data_type}`"
error = f"{name}: `{CONF_VIRTUAL_COUNT} / {CONF_SLAVE_COUNT}:` cannot be combined with `{CONF_DATA_TYPE}: {data_type}`"
raise vol.Invalid(error)
if swap_type != CONF_SWAP_NONE:
swap_type_validator = {

View File

@ -247,7 +247,7 @@ async def test_config_sensor(hass: HomeAssistant, mock_modbus) -> None:
},
]
},
f"{TEST_ENTITY_NAME}: `{CONF_STRUCTURE}` missing or empty, demanded with `{CONF_DATA_TYPE}: {DataType.CUSTOM}`",
f"{TEST_ENTITY_NAME}: `{CONF_STRUCTURE}:` missing, demanded with `{CONF_DATA_TYPE}: {DataType.CUSTOM}`",
),
(
{