Do not expose child modules on parent devices (#964)

Removes the logic to expose child modules on parent devices,
which could cause complications with downstream consumers unknowingly duplicating things.
This commit is contained in:
Steven B
2024-06-10 05:59:37 +01:00
committed by GitHub
parent b094e334ca
commit fe0bbf1b98
6 changed files with 34 additions and 38 deletions

View File

@@ -57,7 +57,6 @@ class SmartDevice(Device):
self._components: dict[str, int] = {}
self._state_information: dict[str, Any] = {}
self._modules: dict[str | ModuleName[Module], SmartModule] = {}
self._exposes_child_modules = False
self._parent: SmartDevice | None = None
self._children: Mapping[str, SmartDevice] = {}
self._last_update = {}
@@ -99,16 +98,6 @@ class SmartDevice(Device):
@property
def modules(self) -> ModuleMapping[SmartModule]:
"""Return the device modules."""
if self._exposes_child_modules:
modules = {k: v for k, v in self._modules.items()}
for child in self._children.values():
for k, v in child._modules.items():
if k not in modules:
modules[k] = v
if TYPE_CHECKING:
return cast(ModuleMapping[SmartModule], modules)
return modules
if TYPE_CHECKING: # Needed for python 3.8
return cast(ModuleMapping[SmartModule], self._modules)
return self._modules
@@ -213,7 +202,6 @@ class SmartDevice(Device):
skip_parent_only_modules = True
elif self._children and self.device_type == DeviceType.WallSwitch:
# _initialize_modules is called on the parent after the children
self._exposes_child_modules = True
for child in self._children.values():
child_modules_to_skip.update(**child.modules)
@@ -332,10 +320,7 @@ class SmartDevice(Device):
)
for module in self.modules.values():
# Check if module features have already been initialized.
# i.e. when _exposes_child_modules is true
if not module._module_features:
module._initialize_features()
module._initialize_features()
for feat in module._module_features.values():
self._add_feature(feat)
for child in self._children.values():