Address review comments for 53918 (#53927)

This commit is contained in:
Joakim Sørensen 2021-08-04 09:29:51 +02:00 committed by GitHub
parent 083868ac01
commit f9071a40de
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 21 additions and 31 deletions

View File

@ -1,5 +1,4 @@
"""A platform that to monitor Uptime Robot monitors."""
from dataclasses import dataclass
from datetime import timedelta
import logging
@ -32,13 +31,6 @@ ATTRIBUTION = "Data provided by Uptime Robot"
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({vol.Required(CONF_API_KEY): cv.string})
@dataclass
class UptimeRobotBinarySensorEntityDescription(BinarySensorEntityDescription):
"""Entity description for UptimeRobotBinarySensor."""
target: str = ""
async def async_setup_platform(
hass: HomeAssistant, config, async_add_entities, discovery_info=None
):
@ -46,12 +38,11 @@ async def async_setup_platform(
uptime_robot_api = UptimeRobot()
api_key = config[CONF_API_KEY]
def api_wrapper():
return uptime_robot_api.getMonitors(api_key)
async def async_update_data():
"""Fetch data from API UptimeRobot API."""
def api_wrapper():
return uptime_robot_api.getMonitors(api_key)
async with async_timeout.timeout(10):
monitors = await hass.async_add_executor_job(api_wrapper)
if not monitors or monitors.get("stat") != "ok":
@ -76,16 +67,15 @@ async def async_setup_platform(
[
UptimeRobotBinarySensor(
coordinator,
UptimeRobotBinarySensorEntityDescription(
BinarySensorEntityDescription(
key=monitor["id"],
name=monitor["friendly_name"],
target=monitor["url"],
device_class=DEVICE_CLASS_CONNECTIVITY,
),
target=monitor["url"],
)
for monitor in coordinator.data["monitors"]
],
True,
)
@ -95,28 +85,28 @@ class UptimeRobotBinarySensor(BinarySensorEntity, CoordinatorEntity):
def __init__(
self,
coordinator: DataUpdateCoordinator,
description: UptimeRobotBinarySensorEntityDescription,
description: BinarySensorEntityDescription,
target: str,
) -> None:
"""Initialize Uptime Robot the binary sensor."""
super().__init__(coordinator)
self.coordinator = coordinator
self.entity_description = description
self._target = target
self._attr_extra_state_attributes = {
ATTR_ATTRIBUTION: ATTRIBUTION,
ATTR_TARGET: self.entity_description.target,
ATTR_TARGET: self._target,
}
async def async_update(self):
"""Get the latest state of the binary sensor."""
if monitor := get_monitor_by_id(
self.coordinator.data.get("monitors", []), self.entity_description.key
@property
def is_on(self) -> bool:
"""Return True if the entity is on."""
if monitor := next(
(
monitor
for monitor in self.coordinator.data.get("monitors", [])
if monitor["id"] == self.entity_description.key
),
None,
):
self._attr_is_on = monitor["status"] == 2
def get_monitor_by_id(monitors, monitor_id):
"""Return the monitor object matching the id."""
filtered = [monitor for monitor in monitors if monitor["id"] == monitor_id]
if len(filtered) == 0:
return
return filtered[0]
return monitor["status"] == 2
return False