From 692ed8c639fb82c6dc374b8785d6b55ceb1d7adc Mon Sep 17 00:00:00 2001
From: "J. Nick Koston" <nick@koston.org>
Date: Sun, 30 Aug 2020 13:02:56 -0500
Subject: [PATCH] Update notion to use CoordinatorEntity (#39460)

---
 homeassistant/components/notion/__init__.py   | 36 +++++++++----------
 .../components/notion/binary_sensor.py        |  4 +--
 homeassistant/components/notion/sensor.py     |  4 +--
 3 files changed, 21 insertions(+), 23 deletions(-)

diff --git a/homeassistant/components/notion/__init__.py b/homeassistant/components/notion/__init__.py
index 72b6ac610db..1e7d12df38c 100644
--- a/homeassistant/components/notion/__init__.py
+++ b/homeassistant/components/notion/__init__.py
@@ -16,8 +16,11 @@ from homeassistant.helpers import (
     config_validation as cv,
     device_registry as dr,
 )
-from homeassistant.helpers.entity import Entity
-from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
+from homeassistant.helpers.update_coordinator import (
+    CoordinatorEntity,
+    DataUpdateCoordinator,
+    UpdateFailed,
+)
 
 from .const import DATA_COORDINATOR, DOMAIN
 
@@ -166,7 +169,7 @@ async def async_register_new_bridge(
     )
 
 
-class NotionEntity(Entity):
+class NotionEntity(CoordinatorEntity):
     """Define a base Notion entity."""
 
     def __init__(
@@ -180,9 +183,9 @@ class NotionEntity(Entity):
         device_class: str,
     ):
         """Initialize the entity."""
+        super().__init__(coordinator)
         self._attrs = {ATTR_ATTRIBUTION: DEFAULT_ATTRIBUTION}
         self._bridge_id = bridge_id
-        self._coordinator = coordinator
         self._device_class = device_class
         self._name = name
         self._sensor_id = sensor_id
@@ -194,8 +197,8 @@ class NotionEntity(Entity):
     def available(self) -> bool:
         """Return True if entity is available."""
         return (
-            self._coordinator.last_update_success
-            and self._task_id in self._coordinator.data["tasks"]
+            self.coordinator.last_update_success
+            and self._task_id in self.coordinator.data["tasks"]
         )
 
     @property
@@ -211,8 +214,8 @@ class NotionEntity(Entity):
     @property
     def device_info(self) -> dict:
         """Return device registry information for this entity."""
-        bridge = self._coordinator.data["bridges"].get(self._bridge_id, {})
-        sensor = self._coordinator.data["sensors"][self._sensor_id]
+        bridge = self.coordinator.data["bridges"].get(self._bridge_id, {})
+        sensor = self.coordinator.data["sensors"][self._sensor_id]
 
         return {
             "identifiers": {(DOMAIN, sensor["hardware_id"])},
@@ -226,18 +229,13 @@ class NotionEntity(Entity):
     @property
     def name(self) -> str:
         """Return the name of the entity."""
-        sensor = self._coordinator.data["sensors"][self._sensor_id]
+        sensor = self.coordinator.data["sensors"][self._sensor_id]
         return f'{sensor["name"]}: {self._name}'
 
-    @property
-    def should_poll(self) -> bool:
-        """Disable entity polling."""
-        return False
-
     @property
     def unique_id(self) -> str:
         """Return a unique, unchanging string that represents this entity."""
-        task = self._coordinator.data["tasks"][self._task_id]
+        task = self.coordinator.data["tasks"][self._task_id]
         return f'{self._sensor_id}_{task["task_type"]}'
 
     async def _async_update_bridge_id(self) -> None:
@@ -245,21 +243,21 @@ class NotionEntity(Entity):
 
         Sensors can move to other bridges based on signal strength, etc.
         """
-        sensor = self._coordinator.data["sensors"][self._sensor_id]
+        sensor = self.coordinator.data["sensors"][self._sensor_id]
 
         # If the sensor's bridge ID is the same as what we had before or if it points
         # to a bridge that doesn't exist (which can happen due to a Notion API bug),
         # return immediately:
         if (
             self._bridge_id == sensor["bridge"]["id"]
-            or sensor["bridge"]["id"] not in self._coordinator.data["bridges"]
+            or sensor["bridge"]["id"] not in self.coordinator.data["bridges"]
         ):
             return
 
         self._bridge_id = sensor["bridge"]["id"]
 
         device_registry = await dr.async_get_registry(self.hass)
-        bridge = self._coordinator.data["bridges"][self._bridge_id]
+        bridge = self.coordinator.data["bridges"][self._bridge_id]
         bridge_device = device_registry.async_get_device(
             {DOMAIN: bridge["hardware_id"]}, set()
         )
@@ -285,6 +283,6 @@ class NotionEntity(Entity):
             self._async_update_from_latest_data()
             self.async_write_ha_state()
 
-        self.async_on_remove(self._coordinator.async_add_listener(update))
+        self.async_on_remove(self.coordinator.async_add_listener(update))
 
         self._async_update_from_latest_data()
diff --git a/homeassistant/components/notion/binary_sensor.py b/homeassistant/components/notion/binary_sensor.py
index 0be4a5336cb..e798b538565 100644
--- a/homeassistant/components/notion/binary_sensor.py
+++ b/homeassistant/components/notion/binary_sensor.py
@@ -73,12 +73,12 @@ class NotionBinarySensor(NotionEntity, BinarySensorEntity):
     @callback
     def _async_update_from_latest_data(self) -> None:
         """Fetch new state data for the sensor."""
-        self._state = self._coordinator.data["tasks"][self._task_id]["status"]["value"]
+        self._state = self.coordinator.data["tasks"][self._task_id]["status"]["value"]
 
     @property
     def is_on(self) -> bool:
         """Return whether the sensor is on or off."""
-        task = self._coordinator.data["tasks"][self._task_id]
+        task = self.coordinator.data["tasks"][self._task_id]
 
         if task["task_type"] == SENSOR_BATTERY:
             return self._state != "battery_good"
diff --git a/homeassistant/components/notion/sensor.py b/homeassistant/components/notion/sensor.py
index f810245b7e2..091dcd324dc 100644
--- a/homeassistant/components/notion/sensor.py
+++ b/homeassistant/components/notion/sensor.py
@@ -79,13 +79,13 @@ class NotionSensor(NotionEntity):
     @callback
     def _async_update_from_latest_data(self) -> None:
         """Fetch new state data for the sensor."""
-        task = self._coordinator.data["tasks"][self._task_id]
+        task = self.coordinator.data["tasks"][self._task_id]
 
         if task["task_type"] == SENSOR_TEMPERATURE:
             self._state = round(float(task["status"]["value"]), 1)
         else:
             _LOGGER.error(
                 "Unknown task type: %s: %s",
-                self._coordinator.data["sensors"][self._sensor_id],
+                self.coordinator.data["sensors"][self._sensor_id],
                 task["task_type"],
             )