Fix mysensors validation for composite entities (#26666)

* Composite entities require multiple value types to be present in
  child values to function. Any of those value types should trigger an
  entity update if updated.
* Always write platform v names as sets.
* Run black.
This commit is contained in:
Martin Hjelmare
2019-09-17 21:00:17 +02:00
committed by Paulus Schoutsen
parent 39edc45e4e
commit c17057de4b
2 changed files with 63 additions and 60 deletions

View File

@@ -121,20 +121,23 @@ def validate_child(gateway, node_id, child, value_type=None):
child_type_name = next(
(member.name for member in pres if member.value == child.type), None
)
value_types = [value_type] if value_type else [*child.values]
value_type_names = [
value_types = {value_type} if value_type else {*child.values}
value_type_names = {
member.name for member in set_req if member.value in value_types
]
}
platforms = TYPE_TO_PLATFORMS.get(child_type_name, [])
if not platforms:
_LOGGER.warning("Child type %s is not supported", child.type)
return validated
for platform in platforms:
v_names = FLAT_PLATFORM_TYPES[platform, child_type_name]
if not isinstance(v_names, list):
v_names = [v_names]
v_names = [v_name for v_name in v_names if v_name in value_type_names]
platform_v_names = FLAT_PLATFORM_TYPES[platform, child_type_name]
v_names = platform_v_names & value_type_names
if not v_names:
child_value_names = {
member.name for member in set_req if member.value in child.values
}
v_names = platform_v_names & child_value_names
for v_name in v_names:
child_schema_gen = SCHEMAS.get((platform, v_name), default_schema)