diff --git a/homeassistant/components/speedtestdotnet/__init__.py b/homeassistant/components/speedtestdotnet/__init__.py index 62f7b2dbd73..94c7f8fb039 100644 --- a/homeassistant/components/speedtestdotnet/__init__.py +++ b/homeassistant/components/speedtestdotnet/__init__.py @@ -5,18 +5,11 @@ from datetime import timedelta import logging import speedtest -import voluptuous as vol -from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry -from homeassistant.const import ( - CONF_MONITORED_CONDITIONS, - CONF_SCAN_INTERVAL, - EVENT_HOMEASSISTANT_STARTED, -) +from homeassistant.config_entries import ConfigEntry +from homeassistant.const import CONF_SCAN_INTERVAL, EVENT_HOMEASSISTANT_STARTED from homeassistant.core import CoreState, HomeAssistant from homeassistant.exceptions import ConfigEntryNotReady -import homeassistant.helpers.config_validation as cv -from homeassistant.helpers.typing import ConfigType from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed from .const import ( @@ -26,59 +19,11 @@ from .const import ( DEFAULT_SERVER, DOMAIN, PLATFORMS, - SENSOR_TYPES, SPEED_TEST_SERVICE, ) _LOGGER = logging.getLogger(__name__) -SENSOR_KEYS = [desc.key for desc in SENSOR_TYPES] - -CONFIG_SCHEMA = vol.Schema( - vol.All( - # Deprecated in Home Assistant 2021.6 - cv.deprecated(DOMAIN), - { - DOMAIN: vol.Schema( - { - vol.Optional(CONF_SERVER_ID): cv.positive_int, - vol.Optional( - CONF_SCAN_INTERVAL, - default=timedelta(minutes=DEFAULT_SCAN_INTERVAL), - ): cv.positive_time_period, - vol.Optional(CONF_MANUAL, default=False): cv.boolean, - vol.Optional( - CONF_MONITORED_CONDITIONS, default=list(SENSOR_KEYS) - ): vol.All(cv.ensure_list, [vol.In(list(SENSOR_KEYS))]), - } - ) - }, - ), - extra=vol.ALLOW_EXTRA, -) - - -def server_id_valid(server_id: str) -> bool: - """Check if server_id is valid.""" - try: - api = speedtest.Speedtest() - api.get_servers([int(server_id)]) - except (speedtest.ConfigRetrievalError, speedtest.NoMatchedServers): - return False - - return True - - -async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: - """Import integration from config.""" - if DOMAIN in config: - hass.async_create_task( - hass.config_entries.flow.async_init( - DOMAIN, context={"source": SOURCE_IMPORT}, data=config[DOMAIN] - ) - ) - return True - async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> bool: """Set up the Speedtest.net component.""" @@ -145,18 +90,17 @@ class SpeedTestDataCoordinator(DataUpdateCoordinator): for servers in test_servers.values(): for server in servers: test_servers_list.append(server) - if test_servers_list: - for server in sorted( - test_servers_list, - key=lambda server: ( - server["country"], - server["name"], - server["sponsor"], - ), - ): - self.servers[ - f"{server['country']} - {server['sponsor']} - {server['name']}" - ] = server + for server in sorted( + test_servers_list, + key=lambda server: ( + server["country"], + server["name"], + server["sponsor"], + ), + ): + self.servers[ + f"{server['country']} - {server['sponsor']} - {server['name']}" + ] = server def update_data(self): """Get the latest data from speedtest.net.""" @@ -184,19 +128,6 @@ class SpeedTestDataCoordinator(DataUpdateCoordinator): except speedtest.SpeedtestException as err: raise UpdateFailed(err) from err - async def async_set_options(self): - """Set options for entry.""" - if not self.config_entry.options: - data = {**self.config_entry.data} - options = { - CONF_SCAN_INTERVAL: data.pop(CONF_SCAN_INTERVAL, DEFAULT_SCAN_INTERVAL), - CONF_MANUAL: data.pop(CONF_MANUAL, False), - CONF_SERVER_ID: str(data.pop(CONF_SERVER_ID, "")), - } - self.hass.config_entries.async_update_entry( - self.config_entry, data=data, options=options - ) - async def async_setup(self) -> None: """Set up SpeedTest.""" try: @@ -209,8 +140,6 @@ class SpeedTestDataCoordinator(DataUpdateCoordinator): """Request update.""" await self.async_request_refresh() - await self.async_set_options() - self.hass.services.async_register(DOMAIN, SPEED_TEST_SERVICE, request_update) self.config_entry.async_on_unload( diff --git a/homeassistant/components/speedtestdotnet/config_flow.py b/homeassistant/components/speedtestdotnet/config_flow.py index e5462aa9379..d82ac6bf728 100644 --- a/homeassistant/components/speedtestdotnet/config_flow.py +++ b/homeassistant/components/speedtestdotnet/config_flow.py @@ -6,11 +6,10 @@ from typing import Any import voluptuous as vol from homeassistant import config_entries -from homeassistant.const import CONF_MONITORED_CONDITIONS, CONF_SCAN_INTERVAL +from homeassistant.const import CONF_SCAN_INTERVAL from homeassistant.core import callback from homeassistant.data_entry_flow import FlowResult -from . import server_id_valid from .const import ( CONF_MANUAL, CONF_SERVER_ID, @@ -47,23 +46,6 @@ class SpeedTestFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): return self.async_create_entry(title=DEFAULT_NAME, data=user_input) - async def async_step_import(self, import_config): - """Import from config.""" - if ( - CONF_SERVER_ID in import_config - and not await self.hass.async_add_executor_job( - server_id_valid, import_config[CONF_SERVER_ID] - ) - ): - return self.async_abort(reason="wrong_server_id") - - import_config[CONF_SCAN_INTERVAL] = int( - import_config[CONF_SCAN_INTERVAL].total_seconds() / 60 - ) - import_config.pop(CONF_MONITORED_CONDITIONS) - - return await self.async_step_user(user_input=import_config) - class SpeedTestOptionsFlowHandler(config_entries.OptionsFlow): """Handle SpeedTest options.""" @@ -91,21 +73,10 @@ class SpeedTestOptionsFlowHandler(config_entries.OptionsFlow): self._servers = self.hass.data[DOMAIN].servers - server = [] - if self.config_entry.options.get( - CONF_SERVER_ID - ) and not self.config_entry.options.get(CONF_SERVER_NAME): - server = [ - key - for (key, value) in self._servers.items() - if value.get("id") == self.config_entry.options[CONF_SERVER_ID] - ] - server_name = server[0] if server else DEFAULT_SERVER - options = { vol.Optional( CONF_SERVER_NAME, - default=self.config_entry.options.get(CONF_SERVER_NAME, server_name), + default=self.config_entry.options.get(CONF_SERVER_NAME, DEFAULT_SERVER), ): vol.In(self._servers.keys()), vol.Optional( CONF_SCAN_INTERVAL, diff --git a/homeassistant/components/speedtestdotnet/sensor.py b/homeassistant/components/speedtestdotnet/sensor.py index 2dc12c956de..8e2d5404438 100644 --- a/homeassistant/components/speedtestdotnet/sensor.py +++ b/homeassistant/components/speedtestdotnet/sensor.py @@ -43,7 +43,6 @@ class SpeedtestSensor(CoordinatorEntity, RestoreEntity, SensorEntity): """Implementation of a speedtest.net sensor.""" coordinator: SpeedTestDataCoordinator - _attr_icon = ICON def __init__( @@ -54,7 +53,6 @@ class SpeedtestSensor(CoordinatorEntity, RestoreEntity, SensorEntity): """Initialize the sensor.""" super().__init__(coordinator) self.entity_description = description - self._attr_name = f"{DEFAULT_NAME} {description.name}" self._attr_unique_id = description.key self._attrs = {ATTR_ATTRIBUTION: ATTRIBUTION} @@ -73,10 +71,10 @@ class SpeedtestSensor(CoordinatorEntity, RestoreEntity, SensorEntity): if self.entity_description.key == "download": self._attrs[ATTR_BYTES_RECEIVED] = self.coordinator.data[ - "bytes_received" + ATTR_BYTES_RECEIVED ] elif self.entity_description.key == "upload": - self._attrs[ATTR_BYTES_SENT] = self.coordinator.data["bytes_sent"] + self._attrs[ATTR_BYTES_SENT] = self.coordinator.data[ATTR_BYTES_SENT] return self._attrs diff --git a/tests/components/speedtestdotnet/test_config_flow.py b/tests/components/speedtestdotnet/test_config_flow.py index 727a5778603..c3c891f6784 100644 --- a/tests/components/speedtestdotnet/test_config_flow.py +++ b/tests/components/speedtestdotnet/test_config_flow.py @@ -2,8 +2,6 @@ from datetime import timedelta from unittest.mock import MagicMock -from speedtest import NoMatchedServers - from homeassistant import config_entries, data_entry_flow from homeassistant.components import speedtestdotnet from homeassistant.components.speedtestdotnet.const import ( @@ -11,9 +9,8 @@ from homeassistant.components.speedtestdotnet.const import ( CONF_SERVER_ID, CONF_SERVER_NAME, DOMAIN, - SENSOR_TYPES, ) -from homeassistant.const import CONF_MONITORED_CONDITIONS, CONF_SCAN_INTERVAL +from homeassistant.const import CONF_SCAN_INTERVAL from homeassistant.core import HomeAssistant from tests.common import MockConfigEntry @@ -33,45 +30,6 @@ async def test_flow_works(hass: HomeAssistant) -> None: assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY -async def test_import_fails(hass: HomeAssistant, mock_api: MagicMock) -> None: - """Test import step fails if server_id is not valid.""" - - mock_api.return_value.get_servers.side_effect = NoMatchedServers - result = await hass.config_entries.flow.async_init( - speedtestdotnet.DOMAIN, - context={"source": config_entries.SOURCE_IMPORT}, - data={ - CONF_SERVER_ID: "223", - CONF_MANUAL: True, - CONF_SCAN_INTERVAL: timedelta(minutes=1), - CONF_MONITORED_CONDITIONS: list(SENSOR_TYPES), - }, - ) - assert result["type"] == data_entry_flow.RESULT_TYPE_ABORT - assert result["reason"] == "wrong_server_id" - - -async def test_import_success(hass): - """Test import step is successful if server_id is valid.""" - - result = await hass.config_entries.flow.async_init( - speedtestdotnet.DOMAIN, - context={"source": config_entries.SOURCE_IMPORT}, - data={ - CONF_SERVER_ID: "1", - CONF_MANUAL: True, - CONF_SCAN_INTERVAL: timedelta(minutes=1), - CONF_MONITORED_CONDITIONS: list(SENSOR_TYPES), - }, - ) - - assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY - assert result["title"] == "SpeedTest" - assert result["data"][CONF_SERVER_ID] == "1" - assert result["data"][CONF_MANUAL] is True - assert result["data"][CONF_SCAN_INTERVAL] == 1 - - async def test_options(hass: HomeAssistant, mock_api: MagicMock) -> None: """Test updating options.""" entry = MockConfigEntry(