From cd4c31bc79aa98c1e363a1220125b439e2c5c8e8 Mon Sep 17 00:00:00 2001 From: Simon Hansen <67142049+DurgNomis-drol@users.noreply.github.com> Date: Sat, 3 Sep 2022 10:32:03 +0200 Subject: [PATCH] Convert platform in iss integration (#77218) * Hopefully fix everthing and be happy * ... * update coverage file * Fix tests --- .coveragerc | 4 +-- homeassistant/components/iss/__init__.py | 14 +++------ homeassistant/components/iss/config_flow.py | 7 ++--- .../iss/{binary_sensor.py => sensor.py} | 31 ++++++------------- tests/components/iss/test_config_flow.py | 17 ---------- 5 files changed, 17 insertions(+), 56 deletions(-) rename homeassistant/components/iss/{binary_sensor.py => sensor.py} (67%) diff --git a/.coveragerc b/.coveragerc index 3ff0d49965c..99d98d36e6b 100644 --- a/.coveragerc +++ b/.coveragerc @@ -587,7 +587,7 @@ omit = homeassistant/components/iqvia/sensor.py homeassistant/components/irish_rail_transport/sensor.py homeassistant/components/iss/__init__.py - homeassistant/components/iss/binary_sensor.py + homeassistant/components/iss/sensor.py homeassistant/components/isy994/__init__.py homeassistant/components/isy994/binary_sensor.py homeassistant/components/isy994/climate.py @@ -1216,7 +1216,7 @@ omit = homeassistant/components/switchbot/const.py homeassistant/components/switchbot/entity.py homeassistant/components/switchbot/cover.py - homeassistant/components/switchbot/light.py + homeassistant/components/switchbot/light.py homeassistant/components/switchbot/sensor.py homeassistant/components/switchbot/coordinator.py homeassistant/components/switchmate/switch.py diff --git a/homeassistant/components/iss/__init__.py b/homeassistant/components/iss/__init__.py index d6065fd4f78..640e9d5d1da 100644 --- a/homeassistant/components/iss/__init__.py +++ b/homeassistant/components/iss/__init__.py @@ -2,7 +2,7 @@ from __future__ import annotations from dataclasses import dataclass -from datetime import datetime, timedelta +from datetime import timedelta import logging import pyiss @@ -18,7 +18,7 @@ from .const import DOMAIN _LOGGER = logging.getLogger(__name__) -PLATFORMS = [Platform.BINARY_SENSOR] +PLATFORMS = [Platform.SENSOR] @dataclass @@ -27,31 +27,25 @@ class IssData: number_of_people_in_space: int current_location: dict[str, str] - is_above: bool - next_rise: datetime -def update(iss: pyiss.ISS, latitude: float, longitude: float) -> IssData: +def update(iss: pyiss.ISS) -> IssData: """Retrieve data from the pyiss API.""" return IssData( number_of_people_in_space=iss.number_of_people_in_space(), current_location=iss.current_location(), - is_above=iss.is_ISS_above(latitude, longitude), - next_rise=iss.next_rise(latitude, longitude), ) async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: """Set up this integration using UI.""" hass.data.setdefault(DOMAIN, {}) - latitude = hass.config.latitude - longitude = hass.config.longitude iss = pyiss.ISS() async def async_update() -> IssData: try: - return await hass.async_add_executor_job(update, iss, latitude, longitude) + return await hass.async_add_executor_job(update, iss) except (HTTPError, requests.exceptions.ConnectionError) as ex: raise UpdateFailed("Unable to retrieve data") from ex diff --git a/homeassistant/components/iss/config_flow.py b/homeassistant/components/iss/config_flow.py index b43949daadc..ebfd445f62c 100644 --- a/homeassistant/components/iss/config_flow.py +++ b/homeassistant/components/iss/config_flow.py @@ -7,9 +7,10 @@ from homeassistant.const import CONF_NAME, CONF_SHOW_ON_MAP from homeassistant.core import callback from homeassistant.data_entry_flow import FlowResult -from .binary_sensor import DEFAULT_NAME from .const import DOMAIN +DEFAULT_NAME = "ISS" + class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): """Config flow for iss component.""" @@ -30,10 +31,6 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): if self._async_current_entries(): return self.async_abort(reason="single_instance_allowed") - # Check if location have been defined. - if not self.hass.config.latitude and not self.hass.config.longitude: - return self.async_abort(reason="latitude_longitude_not_defined") - if user_input is not None: return self.async_create_entry( title=user_input.get(CONF_NAME, DEFAULT_NAME), diff --git a/homeassistant/components/iss/binary_sensor.py b/homeassistant/components/iss/sensor.py similarity index 67% rename from homeassistant/components/iss/binary_sensor.py rename to homeassistant/components/iss/sensor.py index 77cb86fc45a..fac23dfd9fa 100644 --- a/homeassistant/components/iss/binary_sensor.py +++ b/homeassistant/components/iss/sensor.py @@ -1,10 +1,10 @@ -"""Support for iss binary sensor.""" +"""Support for iss sensor.""" from __future__ import annotations import logging from typing import Any -from homeassistant.components.binary_sensor import BinarySensorEntity +from homeassistant.components.sensor import SensorEntity from homeassistant.config_entries import ConfigEntry from homeassistant.const import ATTR_LATITUDE, ATTR_LONGITUDE, CONF_SHOW_ON_MAP from homeassistant.core import HomeAssistant @@ -19,12 +19,6 @@ from .const import DOMAIN _LOGGER = logging.getLogger(__name__) -ATTR_ISS_NEXT_RISE = "next_rise" -ATTR_ISS_NUMBER_PEOPLE_SPACE = "number_of_people_in_space" - -DEFAULT_NAME = "ISS" -DEFAULT_DEVICE_CLASS = "visible" - async def async_setup_entry( hass: HomeAssistant, @@ -37,15 +31,11 @@ async def async_setup_entry( name = entry.title show_on_map = entry.options.get(CONF_SHOW_ON_MAP, False) - async_add_entities([IssBinarySensor(coordinator, name, show_on_map)]) + async_add_entities([IssSensor(coordinator, name, show_on_map)]) -class IssBinarySensor( - CoordinatorEntity[DataUpdateCoordinator[IssData]], BinarySensorEntity -): - """Implementation of the ISS binary sensor.""" - - _attr_device_class = DEFAULT_DEVICE_CLASS +class IssSensor(CoordinatorEntity[DataUpdateCoordinator[IssData]], SensorEntity): + """Implementation of the ISS sensor.""" def __init__( self, coordinator: DataUpdateCoordinator[IssData], name: str, show: bool @@ -57,17 +47,14 @@ class IssBinarySensor( self._show_on_map = show @property - def is_on(self) -> bool: - """Return true if the binary sensor is on.""" - return self.coordinator.data.is_above is True + def native_value(self) -> int: + """Return number of people in space.""" + return self.coordinator.data.number_of_people_in_space @property def extra_state_attributes(self) -> dict[str, Any]: """Return the state attributes.""" - attrs = { - ATTR_ISS_NUMBER_PEOPLE_SPACE: self.coordinator.data.number_of_people_in_space, - ATTR_ISS_NEXT_RISE: self.coordinator.data.next_rise, - } + attrs = {} if self._show_on_map: attrs[ATTR_LONGITUDE] = self.coordinator.data.current_location.get( "longitude" diff --git a/tests/components/iss/test_config_flow.py b/tests/components/iss/test_config_flow.py index eabca610ddf..a806bea3056 100644 --- a/tests/components/iss/test_config_flow.py +++ b/tests/components/iss/test_config_flow.py @@ -3,7 +3,6 @@ from unittest.mock import patch from homeassistant import data_entry_flow from homeassistant.components.iss.const import DOMAIN -from homeassistant.config import async_process_ha_core_config from homeassistant.config_entries import SOURCE_USER from homeassistant.const import CONF_SHOW_ON_MAP from homeassistant.core import HomeAssistant @@ -48,22 +47,6 @@ async def test_integration_already_exists(hass: HomeAssistant): assert result.get("reason") == "single_instance_allowed" -async def test_abort_no_home(hass: HomeAssistant): - """Test we don't create an entry if no coordinates are set.""" - - await async_process_ha_core_config( - hass, - {"latitude": 0.0, "longitude": 0.0}, - ) - - result = await hass.config_entries.flow.async_init( - DOMAIN, context={"source": SOURCE_USER}, data={} - ) - - assert result.get("type") == data_entry_flow.FlowResultType.ABORT - assert result.get("reason") == "latitude_longitude_not_defined" - - async def test_options(hass: HomeAssistant): """Test options flow."""