From 7716740c18369d6073e3c6bb41865cd61e7979a3 Mon Sep 17 00:00:00 2001
From: epenet <6771947+epenet@users.noreply.github.com>
Date: Mon, 9 Nov 2020 23:21:16 +0100
Subject: [PATCH] Update inheritance for onewire entities (#43019)

---
 .../components/onewire/binary_sensor.py       |  6 +--
 .../components/onewire/onewire_entities.py    | 42 ++++++++-----------
 homeassistant/components/onewire/sensor.py    | 32 +++++++++++---
 homeassistant/components/onewire/switch.py    |  6 +--
 4 files changed, 50 insertions(+), 36 deletions(-)

diff --git a/homeassistant/components/onewire/binary_sensor.py b/homeassistant/components/onewire/binary_sensor.py
index a6c4721de54..031dd984702 100644
--- a/homeassistant/components/onewire/binary_sensor.py
+++ b/homeassistant/components/onewire/binary_sensor.py
@@ -5,7 +5,7 @@ from homeassistant.components.binary_sensor import BinarySensorEntity
 from homeassistant.const import CONF_TYPE
 
 from .const import CONF_TYPE_OWSERVER, DOMAIN, SENSOR_TYPE_SENSED
-from .onewire_entities import OneWireProxy
+from .onewire_entities import OneWireProxyEntity
 from .onewirehub import OneWireHub
 
 DEVICE_BINARY_SENSORS = {
@@ -109,7 +109,7 @@ def get_entities(onewirehub: OneWireHub):
                 os.path.split(device["path"])[0], device_sensor["path"]
             )
             entities.append(
-                OneWireBinarySensor(
+                OneWireProxyBinarySensor(
                     sensor_id,
                     device_file,
                     device_sensor["type"],
@@ -123,7 +123,7 @@ def get_entities(onewirehub: OneWireHub):
     return entities
 
 
-class OneWireBinarySensor(BinarySensorEntity, OneWireProxy):
+class OneWireProxyBinarySensor(OneWireProxyEntity, BinarySensorEntity):
     """Implementation of a 1-Wire binary sensor."""
 
     @property
diff --git a/homeassistant/components/onewire/onewire_entities.py b/homeassistant/components/onewire/onewire_entities.py
index c59fba2efcd..d16a2e9b493 100644
--- a/homeassistant/components/onewire/onewire_entities.py
+++ b/homeassistant/components/onewire/onewire_entities.py
@@ -5,7 +5,6 @@ from typing import Any, Dict, Optional
 from pyownet import protocol
 
 from homeassistant.helpers.entity import Entity
-from homeassistant.helpers.typing import StateType
 
 from .const import (
     SENSOR_TYPE_COUNT,
@@ -18,24 +17,24 @@ from .const import (
 _LOGGER = logging.getLogger(__name__)
 
 
-class OneWire(Entity):
-    """Implementation of a 1-Wire sensor."""
+class OneWireBaseEntity(Entity):
+    """Implementation of a 1-Wire entity."""
 
     def __init__(
         self,
         name,
         device_file,
-        sensor_type: str,
-        sensor_name: str = None,
+        entity_type: str,
+        entity_name: str = None,
         device_info=None,
         default_disabled: bool = False,
     ):
-        """Initialize the sensor."""
-        self._name = f"{name} {sensor_name or sensor_type.capitalize()}"
+        """Initialize the entity."""
+        self._name = f"{name} {entity_name or entity_type.capitalize()}"
         self._device_file = device_file
-        self._sensor_type = sensor_type
-        self._device_class = SENSOR_TYPES[sensor_type][1]
-        self._unit_of_measurement = SENSOR_TYPES[sensor_type][0]
+        self._entity_type = entity_type
+        self._device_class = SENSOR_TYPES[entity_type][1]
+        self._unit_of_measurement = SENSOR_TYPES[entity_type][0]
         self._device_info = device_info
         self._state = None
         self._value_raw = None
@@ -43,14 +42,9 @@ class OneWire(Entity):
 
     @property
     def name(self) -> Optional[str]:
-        """Return the name of the sensor."""
+        """Return the name of the entity."""
         return self._name
 
-    @property
-    def state(self) -> StateType:
-        """Return the state of the sensor."""
-        return self._state
-
     @property
     def device_class(self) -> Optional[str]:
         """Return the class of this device."""
@@ -63,7 +57,7 @@ class OneWire(Entity):
 
     @property
     def device_state_attributes(self) -> Optional[Dict[str, Any]]:
-        """Return the state attributes of the sensor."""
+        """Return the state attributes of the entity."""
         return {"device_file": self._device_file, "raw_value": self._value_raw}
 
     @property
@@ -82,22 +76,22 @@ class OneWire(Entity):
         return not self._default_disabled
 
 
-class OneWireProxy(OneWire):
-    """Implementation of a 1-Wire sensor through owserver."""
+class OneWireProxyEntity(OneWireBaseEntity):
+    """Implementation of a 1-Wire entity connected through owserver."""
 
     def __init__(
         self,
         name: str,
         device_file: str,
-        sensor_type: str,
-        sensor_name: str,
+        entity_type: str,
+        entity_name: str,
         device_info: Dict[str, Any],
         default_disabled: bool,
         owproxy: protocol._Proxy,
     ):
         """Initialize the sensor."""
         super().__init__(
-            name, device_file, sensor_type, sensor_name, device_info, default_disabled
+            name, device_file, entity_type, entity_name, device_info, default_disabled
         )
         self._owproxy = owproxy
 
@@ -117,9 +111,9 @@ class OneWireProxy(OneWire):
         except protocol.Error as exc:
             _LOGGER.error("Owserver failure in read(), got: %s", exc)
         else:
-            if self._sensor_type == SENSOR_TYPE_COUNT:
+            if self._entity_type == SENSOR_TYPE_COUNT:
                 value = int(self._value_raw)
-            elif self._sensor_type in [
+            elif self._entity_type in [
                 SENSOR_TYPE_SENSED,
                 SWITCH_TYPE_LATCH,
                 SWITCH_TYPE_PIO,
diff --git a/homeassistant/components/onewire/sensor.py b/homeassistant/components/onewire/sensor.py
index f459a80f5f9..f908c1ada2d 100644
--- a/homeassistant/components/onewire/sensor.py
+++ b/homeassistant/components/onewire/sensor.py
@@ -10,6 +10,7 @@ from homeassistant.components.sensor import PLATFORM_SCHEMA
 from homeassistant.config_entries import SOURCE_IMPORT
 from homeassistant.const import CONF_HOST, CONF_PORT, CONF_TYPE
 import homeassistant.helpers.config_validation as cv
+from homeassistant.helpers.typing import StateType
 
 from .const import (
     CONF_MOUNT_DIR,
@@ -30,7 +31,7 @@ from .const import (
     SENSOR_TYPE_VOLTAGE,
     SENSOR_TYPE_WETNESS,
 )
-from .onewire_entities import OneWire, OneWireProxy
+from .onewire_entities import OneWireBaseEntity, OneWireProxyEntity
 from .onewirehub import OneWireHub
 
 _LOGGER = logging.getLogger(__name__)
@@ -277,7 +278,7 @@ def get_entities(onewirehub: OneWireHub, config):
                     os.path.split(device["path"])[0], device_sensor["path"]
                 )
                 entities.append(
-                    OneWireProxy(
+                    OneWireProxySensor(
                         device_names.get(sensor_id, sensor_id),
                         device_file,
                         device_sensor["type"],
@@ -311,7 +312,7 @@ def get_entities(onewirehub: OneWireHub, config):
             }
             device_file = f"/sys/bus/w1/devices/{sensor_id}/w1_slave"
             entities.append(
-                OneWireDirect(
+                OneWireDirectSensor(
                     device_names.get(sensor_id, sensor_id),
                     device_file,
                     device_info,
@@ -350,7 +351,7 @@ def get_entities(onewirehub: OneWireHub, config):
                         os.path.split(family_file_path)[0], sensor_value
                     )
                     entities.append(
-                        OneWireOWFS(
+                        OneWireOWFSSensor(
                             device_names.get(sensor_id, sensor_id),
                             device_file,
                             sensor_key,
@@ -360,7 +361,16 @@ def get_entities(onewirehub: OneWireHub, config):
     return entities
 
 
-class OneWireDirect(OneWire):
+class OneWireProxySensor(OneWireProxyEntity):
+    """Implementation of a 1-Wire sensor connected through owserver."""
+
+    @property
+    def state(self) -> StateType:
+        """Return the state of the entity."""
+        return self._state
+
+
+class OneWireDirectSensor(OneWireBaseEntity):
     """Implementation of a 1-Wire sensor directly connected to RPI GPIO."""
 
     def __init__(self, name, device_file, device_info, owsensor):
@@ -368,6 +378,11 @@ class OneWireDirect(OneWire):
         super().__init__(name, device_file, "temperature", "Temperature", device_info)
         self._owsensor = owsensor
 
+    @property
+    def state(self) -> StateType:
+        """Return the state of the entity."""
+        return self._state
+
     def update(self):
         """Get the latest data from the device."""
         value = None
@@ -383,13 +398,18 @@ class OneWireDirect(OneWire):
         self._state = value
 
 
-class OneWireOWFS(OneWire):  # pragma: no cover
+class OneWireOWFSSensor(OneWireBaseEntity):  # pragma: no cover
     """Implementation of a 1-Wire sensor through owfs.
 
     This part of the implementation does not conform to policy regarding 3rd-party libraries, and will not longer be updated.
     https://developers.home-assistant.io/docs/creating_platform_code_review/#5-communication-with-devicesservices
     """
 
+    @property
+    def state(self) -> StateType:
+        """Return the state of the entity."""
+        return self._state
+
     def _read_value_raw(self):
         """Read the value as it is returned by the sensor."""
         with open(self._device_file) as ds_device_file:
diff --git a/homeassistant/components/onewire/switch.py b/homeassistant/components/onewire/switch.py
index 2be2c22c6aa..f1b588690ae 100644
--- a/homeassistant/components/onewire/switch.py
+++ b/homeassistant/components/onewire/switch.py
@@ -6,7 +6,7 @@ from homeassistant.components.switch import SwitchEntity
 from homeassistant.const import CONF_TYPE
 
 from .const import CONF_TYPE_OWSERVER, DOMAIN, SWITCH_TYPE_LATCH, SWITCH_TYPE_PIO
-from .onewire_entities import OneWireProxy
+from .onewire_entities import OneWireProxyEntity
 from .onewirehub import OneWireHub
 
 DEVICE_SWITCHES = {
@@ -173,7 +173,7 @@ def get_entities(onewirehub: OneWireHub):
                 os.path.split(device["path"])[0], device_switch["path"]
             )
             entities.append(
-                OneWireSwitch(
+                OneWireProxySwitch(
                     sensor_id,
                     device_file,
                     device_switch["type"],
@@ -187,7 +187,7 @@ def get_entities(onewirehub: OneWireHub):
     return entities
 
 
-class OneWireSwitch(SwitchEntity, OneWireProxy):
+class OneWireProxySwitch(OneWireProxyEntity, SwitchEntity):
     """Implementation of a 1-Wire switch."""
 
     @property
-- 
GitLab