Просмотр исходного кода

Simplify generic DPS initialisation.

Use an intermediate dictionary to simplify complexity of the initialisation of
dps config for generic components.
Jason Rumney 4 лет назад
Родитель
Сommit
5b92147daa

+ 26 - 41
custom_components/tuya_local/generic/climate.py

@@ -53,50 +53,35 @@ class TuyaLocalClimate(ClimateEntity):
         self._device = device
         self._config = config
         self._support_flags = 0
-        self._current_temperature_dps = None
-        self._temperature_dps = None
-        self._temp_high_dps = None
-        self._temp_low_dps = None
-        self._current_humidity_dps = None
-        self._humidity_dps = None
-        self._preset_mode_dps = None
-        self._swing_mode_dps = None
-        self._fan_mode_dps = None
-        self._hvac_mode_dps = None
-        self._unit_dps = None
         self._attr_dps = []
-
-        for d in config.dps():
-            if d.name == "hvac_mode":
-                self._hvac_mode_dps = d
-            elif d.name == ATTR_TEMPERATURE:
-                self._temperature_dps = d
-            elif d.name == ATTR_TARGET_TEMP_HIGH:
-                self._temp_high_dps = d
-            elif d.name == ATTR_TARGET_TEMP_LOW:
-                self._temp_low_dps = d
-            elif d.name == ATTR_CURRENT_TEMPERATURE:
-                self._current_temperature_dps = d
-            elif d.name == ATTR_HUMIDITY:
-                self._humidity_dps = d
-                self._support_flags |= SUPPORT_TARGET_HUMIDITY
-            elif d.name == ATTR_CURRENT_HUMIDITY:
-                self._current_humidity_dps = d
-            elif d.name == ATTR_PRESET_MODE:
-                self._preset_mode_dps = d
-                self._support_flags |= SUPPORT_PRESET_MODE
-            elif d.name == ATTR_SWING_MODE:
-                self._swing_mode_dps = d
-                self._support_flags |= SUPPORT_SWING_MODE
-            elif d.name == ATTR_FAN_MODE:
-                self._fan_mode_dps = d
-                self._support_flags |= SUPPORT_FAN_MODE
-            elif d.name == "temperature_unit":
-                self._unit_dps = d
-            elif not d.hidden:
+        dps_map = {c.name: c for c in config.dps()}
+
+        self._current_temperature_dps = dps_map.pop(ATTR_CURRENT_TEMPERATURE, None)
+        self._temperature_dps = dps_map.pop(ATTR_TEMPERATURE, None)
+        self._temp_high_dps = dps_map.pop(ATTR_TARGET_TEMP_HIGH, None)
+        self._temp_low_dps = dps_map.pop(ATTR_TARGET_TEMP_LOW, None)
+        self._current_humidity_dps = dps_map.pop(ATTR_CURRENT_HUMIDITY, None)
+        self._humidity_dps = dps_map.pop(ATTR_HUMIDITY, None)
+        self._preset_mode_dps = dps_map.pop(ATTR_PRESET_MODE, None)
+        self._swing_mode_dps = dps_map.pop(ATTR_SWING_MODE, None)
+        self._fan_mode_dps = dps_map.pop(ATTR_FAN_MODE, None)
+        self._hvac_mode_dps = dps_map.pop("hvac_mode", None)
+        self._unit_dps = dps_map.pop("temperature_unit", None)
+
+        for d in dps_map.values():
+            if not d.hidden:
                 self._attr_dps.append(d)
 
-        if self._temp_high_dps is not None and self._temp_low_dps is not None:
+        if self._humidity_dps:
+            self._support_flags |= SUPPORT_TARGET_HUMIDITY
+        if self._preset_mode_dps:
+            self._support_flags |= SUPPORT_PRESET_MODE
+        if self._swing_mode_dps:
+            self._support_flags |= SUPPORT_SWING_MODE
+        if self._fan_mode_dps:
+            self._support_flags |= SUPPORT_FAN_MODE
+
+        if self._temp_high_dps and self._temp_low_dps:
             self._support_flags |= SUPPORT_TARGET_TEMPERATURE_RANGE
         elif self._temperature_dps is not None:
             self._support_flags |= SUPPORT_TARGET_TEMPERATURE

+ 18 - 21
custom_components/tuya_local/generic/fan.py

@@ -34,30 +34,27 @@ class TuyaLocalFan(FanEntity):
         self._device = device
         self._config = config
         self._support_flags = 0
-        self._switch_dps = None
-        self._preset_dps = None
-        self._speed_dps = None
-        self._oscillate_dps = None
-        self._direction_dps = None
         self._attr_dps = []
-        for d in config.dps():
-            if d.name == "switch":
-                self._switch_dps = d
-            elif d.name == "preset_mode":
-                self._preset_dps = d
-                self._support_flags |= SUPPORT_PRESET_MODE
-            elif d.name == "speed":
-                self._speed_dps = d
-                self._support_flags |= SUPPORT_SET_SPEED
-            elif d.name == "oscillate":
-                self._oscillate_dps = d
-                self._support_flags |= SUPPORT_OSCILLATE
-            elif d.name == "direction":
-                self._direction_dps = d
-                self._support_flags |= SUPPORT_DIRECTION
-            elif not d.hidden:
+        dps_map = {c.name: c for c in config.dps()}
+        self._switch_dps = dps_map.pop("switch", None)
+        self._preset_dps = dps_map.pop("preset_mode", None)
+        self._speed_dps = dps_map.pop("speed", None)
+        self._oscillate_dps = dps_map.pop("oscillate", None)
+        self._direction_dps = dps_map.pop("direction", None)
+
+        for d in dps_map.values():
+            if not d.hidden:
                 self._attr_dps.append(d)
 
+        if self._preset_dps:
+            self._support_flags |= SUPPORT_PRESET_MODE
+        if self._speed_dps:
+            self._support_flags |= SUPPORT_SET_SPEED
+        if self._oscillate_dps:
+            self._support_flags |= SUPPORT_OSCILLATE
+        if self._direction_dps:
+            self._support_flags |= SUPPORT_DIRECTION
+
     @property
     def supported_features(self):
         """Return the features supported by this climate device."""

+ 9 - 12
custom_components/tuya_local/generic/humidifier.py

@@ -34,21 +34,18 @@ class TuyaLocalHumidifier(HumidifierEntity):
         self._device = device
         self._config = config
         self._support_flags = 0
-        self._humidity_dps = None
-        self._mode_dps = None
-        self._switch_dps = None
         self._attr_dps = []
-        for d in config.dps():
-            if d.name == "switch":
-                self._switch_dps = d
-            elif d.name == "humidity":
-                self._humidity_dps = d
-            elif d.name == "mode":
-                self._mode_dps = d
-                self._support_flags |= SUPPORT_MODES
-            elif not d.hidden:
+        dps_map = {c.name: c for c in config.dps()}
+        self._humidity_dps = dps_map.pop("humidity", None)
+        self._mode_dps = dps_map.pop("mode", None)
+        self._switch_dps = dps_map.pop("switch", None)
+        for d in dps_map.values():
+            if not d.hidden:
                 self._attr_dps.append(d)
 
+        if self._mode_dps:
+            self._support_flags |= SUPPORT_MODES
+
     @property
     def supported_features(self):
         """Return the features supported by this climate device."""

+ 4 - 4
custom_components/tuya_local/generic/light.py

@@ -22,10 +22,10 @@ class TuyaLocalLight(LightEntity):
         self._device = device
         self._config = config
         self._attr_dps = []
-        for d in config.dps():
-            if d.name == "switch":
-                self._switch_dps = d
-            elif not d.hidden:
+        dps_map = {c.name: c for c in config.dps()}
+        self._switch_dps = dps_map.pop("switch")
+        for d in dps_map.values():
+            if not d.hidden:
                 self._attr_dps.append(d)
 
     @property

+ 4 - 4
custom_components/tuya_local/generic/lock.py

@@ -24,10 +24,10 @@ class TuyaLocalLock(LockEntity):
         self._device = device
         self._config = config
         self._attr_dps = []
-        for d in config.dps():
-            if d.name == "lock":
-                self._lock_dps = d
-            elif not d.hidden:
+        dps_map = {c.name: c for c in config.dps()}
+        self._lock_dps = dps_map.pop("lock")
+        for d in dps_map.values():
+            if not d.hidden:
                 self._attr_dps.append(d)
 
     @property

+ 7 - 13
custom_components/tuya_local/generic/switch.py

@@ -27,20 +27,14 @@ class TuyaLocalSwitch(SwitchEntity):
         """
         self._device = device
         self._config = config
-        self._switch_dps = None
-        self._power_dps = None
         self._attr_dps = []
-        for d in config.dps():
-            if d.name == "switch":
-                self._switch_dps = d
-            else:
-                if d.name == "current_power_w":
-                    self._power_dps = d
-                if not d.hidden:
-                    self._attr_dps.append(d)
-
-        if self._switch_dps is None:
-            raise AttributeError("A switch device must have a switch.")
+        dps_map = {c.name: c for c in config.dps()}
+        self._switch_dps = dps_map.pop("switch")
+        self._power_dps = dps_map.get("current_power_w", None)
+
+        for d in dps_map.values():
+            if not d.hidden:
+                self._attr_dps.append(d)
 
     @property
     def should_poll(self):