From 5489b2111a21738155edc42168029584c8b28f6a Mon Sep 17 00:00:00 2001 From: Gabe Cook Date: Tue, 12 Jul 2022 09:06:38 -0500 Subject: [PATCH] Fix Ruckus Unleashed SSH connection failures (#75032) --- .../components/ruckus_unleashed/__init__.py | 7 +++---- .../components/ruckus_unleashed/config_flow.py | 14 +++++++------- .../components/ruckus_unleashed/coordinator.py | 4 +--- .../components/ruckus_unleashed/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- tests/components/ruckus_unleashed/test_init.py | 4 ++-- 7 files changed, 16 insertions(+), 19 deletions(-) diff --git a/homeassistant/components/ruckus_unleashed/__init__.py b/homeassistant/components/ruckus_unleashed/__init__.py index 258a5968ab1..5861486457f 100644 --- a/homeassistant/components/ruckus_unleashed/__init__.py +++ b/homeassistant/components/ruckus_unleashed/__init__.py @@ -29,8 +29,7 @@ from .coordinator import RuckusUnleashedDataUpdateCoordinator async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: """Set up Ruckus Unleashed from a config entry.""" try: - ruckus = await hass.async_add_executor_job( - Ruckus, + ruckus = await Ruckus.create( entry.data[CONF_HOST], entry.data[CONF_USERNAME], entry.data[CONF_PASSWORD], @@ -42,10 +41,10 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: await coordinator.async_config_entry_first_refresh() - system_info = await hass.async_add_executor_job(ruckus.system_info) + system_info = await ruckus.system_info() registry = device_registry.async_get(hass) - ap_info = await hass.async_add_executor_job(ruckus.ap_info) + ap_info = await ruckus.ap_info() for device in ap_info[API_AP][API_ID].values(): registry.async_get_or_create( config_entry_id=entry.entry_id, diff --git a/homeassistant/components/ruckus_unleashed/config_flow.py b/homeassistant/components/ruckus_unleashed/config_flow.py index 7d34e620a13..4adf245c3de 100644 --- a/homeassistant/components/ruckus_unleashed/config_flow.py +++ b/homeassistant/components/ruckus_unleashed/config_flow.py @@ -21,22 +21,24 @@ DATA_SCHEMA = vol.Schema( ) -def validate_input(hass: core.HomeAssistant, data): +async def validate_input(hass: core.HomeAssistant, data): """Validate the user input allows us to connect. Data has the keys from DATA_SCHEMA with values provided by the user. """ try: - ruckus = Ruckus(data[CONF_HOST], data[CONF_USERNAME], data[CONF_PASSWORD]) + ruckus = await Ruckus.create( + data[CONF_HOST], data[CONF_USERNAME], data[CONF_PASSWORD] + ) except AuthenticationError as error: raise InvalidAuth from error except ConnectionError as error: raise CannotConnect from error - mesh_name = ruckus.mesh_name() + mesh_name = await ruckus.mesh_name() - system_info = ruckus.system_info() + system_info = await ruckus.system_info() try: host_serial = system_info[API_SYSTEM_OVERVIEW][API_SERIAL] except KeyError as error: @@ -58,9 +60,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): errors = {} if user_input is not None: try: - info = await self.hass.async_add_executor_job( - validate_input, self.hass, user_input - ) + info = await validate_input(self.hass, user_input) except CannotConnect: errors["base"] = "cannot_connect" except InvalidAuth: diff --git a/homeassistant/components/ruckus_unleashed/coordinator.py b/homeassistant/components/ruckus_unleashed/coordinator.py index 8b80eaae0da..e84b79ef843 100644 --- a/homeassistant/components/ruckus_unleashed/coordinator.py +++ b/homeassistant/components/ruckus_unleashed/coordinator.py @@ -37,9 +37,7 @@ class RuckusUnleashedDataUpdateCoordinator(DataUpdateCoordinator): async def _fetch_clients(self) -> dict: """Fetch clients from the API and format them.""" - clients = await self.hass.async_add_executor_job( - self.ruckus.current_active_clients - ) + clients = await self.ruckus.current_active_clients() return {e[API_MAC]: e for e in clients[API_CURRENT_ACTIVE_CLIENTS][API_CLIENTS]} async def _async_update_data(self) -> dict: diff --git a/homeassistant/components/ruckus_unleashed/manifest.json b/homeassistant/components/ruckus_unleashed/manifest.json index f010d340147..a6b2ad0271c 100644 --- a/homeassistant/components/ruckus_unleashed/manifest.json +++ b/homeassistant/components/ruckus_unleashed/manifest.json @@ -3,7 +3,7 @@ "name": "Ruckus Unleashed", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/ruckus_unleashed", - "requirements": ["pyruckus==0.12"], + "requirements": ["pyruckus==0.16"], "codeowners": ["@gabe565"], "iot_class": "local_polling", "loggers": ["pexpect", "pyruckus"] diff --git a/requirements_all.txt b/requirements_all.txt index 53823fbc756..36b3ba5cb62 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1783,7 +1783,7 @@ pyrisco==0.3.1 pyrituals==0.0.6 # homeassistant.components.ruckus_unleashed -pyruckus==0.12 +pyruckus==0.16 # homeassistant.components.sabnzbd pysabnzbd==1.1.1 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 193daabeabc..e4e8b4262f6 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -1217,7 +1217,7 @@ pyrisco==0.3.1 pyrituals==0.0.6 # homeassistant.components.ruckus_unleashed -pyruckus==0.12 +pyruckus==0.16 # homeassistant.components.sabnzbd pysabnzbd==1.1.1 diff --git a/tests/components/ruckus_unleashed/test_init.py b/tests/components/ruckus_unleashed/test_init.py index e9ac9ec7cd8..d72856aa542 100644 --- a/tests/components/ruckus_unleashed/test_init.py +++ b/tests/components/ruckus_unleashed/test_init.py @@ -31,7 +31,7 @@ async def test_setup_entry_login_error(hass): """Test entry setup failed due to login error.""" entry = mock_config_entry() with patch( - "homeassistant.components.ruckus_unleashed.Ruckus", + "homeassistant.components.ruckus_unleashed.Ruckus.connect", side_effect=AuthenticationError, ): entry.add_to_hass(hass) @@ -45,7 +45,7 @@ async def test_setup_entry_connection_error(hass): """Test entry setup failed due to connection error.""" entry = mock_config_entry() with patch( - "homeassistant.components.ruckus_unleashed.Ruckus", + "homeassistant.components.ruckus_unleashed.Ruckus.connect", side_effect=ConnectionError, ): entry.add_to_hass(hass)