From 6f631c542c54cd75360c0d5fd272433aa168c148 Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Thu, 20 Jan 2022 19:03:26 +0100 Subject: [PATCH] Import hassio (#64561) * Import hassio * Fix HassioAPIError * Use relative import * Adjust import Co-authored-by: epenet --- homeassistant/components/hassio/__init__.py | 2 +- .../components/hassio/system_health.py | 10 ++++---- .../components/hassio/websocket_api.py | 5 ++-- homeassistant/components/http/ban.py | 11 +++++---- homeassistant/components/ozw/__init__.py | 10 ++++---- homeassistant/components/ozw/config_flow.py | 23 ++++++++----------- homeassistant/components/updater/__init__.py | 5 ++-- 7 files changed, 33 insertions(+), 33 deletions(-) diff --git a/homeassistant/components/hassio/__init__.py b/homeassistant/components/hassio/__init__.py index a8e9631a81a..434c95b03b2 100644 --- a/homeassistant/components/hassio/__init__.py +++ b/homeassistant/components/hassio/__init__.py @@ -403,7 +403,7 @@ def is_hassio(hass: HomeAssistant) -> bool: @callback -def get_supervisor_ip(): +def get_supervisor_ip() -> str: """Return the supervisor ip address.""" if "SUPERVISOR" not in os.environ: return None diff --git a/homeassistant/components/hassio/system_health.py b/homeassistant/components/hassio/system_health.py index 47e9a3d2995..7fbc0479939 100644 --- a/homeassistant/components/hassio/system_health.py +++ b/homeassistant/components/hassio/system_health.py @@ -4,6 +4,8 @@ import os from homeassistant.components import system_health from homeassistant.core import HomeAssistant, callback +from . import get_host_info, get_info, get_os_info, get_supervisor_info + SUPERVISOR_PING = f"http://{os.environ['HASSIO']}/supervisor/ping" OBSERVER_URL = f"http://{os.environ['HASSIO']}:4357" @@ -18,9 +20,9 @@ def async_register( async def system_health_info(hass: HomeAssistant): """Get info for the info page.""" - info = hass.components.hassio.get_info() - host_info = hass.components.hassio.get_host_info() - supervisor_info = hass.components.hassio.get_supervisor_info() + info = get_info(hass) + host_info = get_host_info(hass) + supervisor_info = get_supervisor_info(hass) if supervisor_info.get("healthy"): healthy = True @@ -52,7 +54,7 @@ async def system_health_info(hass: HomeAssistant): } if info.get("hassos") is not None: - os_info = hass.components.hassio.get_os_info() + os_info = get_os_info(hass) information["board"] = os_info.get("board") information["supervisor_api"] = system_health.async_check_can_reach_url( diff --git a/homeassistant/components/hassio/websocket_api.py b/homeassistant/components/hassio/websocket_api.py index e2ffff5e1e3..4af090d7154 100644 --- a/homeassistant/components/hassio/websocket_api.py +++ b/homeassistant/components/hassio/websocket_api.py @@ -14,6 +14,7 @@ from homeassistant.helpers.dispatcher import ( async_dispatcher_send, ) +from . import HassioAPIError from .const import ( ATTR_DATA, ATTR_ENDPOINT, @@ -114,8 +115,8 @@ async def websocket_supervisor_api( ) if result.get(ATTR_RESULT) == "error": - raise hass.components.hassio.HassioAPIError(result.get("message")) - except hass.components.hassio.HassioAPIError as err: + raise HassioAPIError(result.get("message")) + except HassioAPIError as err: _LOGGER.error("Failed to to call %s - %s", msg[ATTR_ENDPOINT], err) connection.send_error( msg[WS_ID], code=websocket_api.ERR_UNKNOWN_ERROR, message=str(err) diff --git a/homeassistant/components/http/ban.py b/homeassistant/components/http/ban.py index 576cb348ac8..b50555b9841 100644 --- a/homeassistant/components/http/ban.py +++ b/homeassistant/components/http/ban.py @@ -135,11 +135,12 @@ async def process_wrong_login(request: Request) -> None: request.app[KEY_FAILED_LOGIN_ATTEMPTS][remote_addr] += 1 # Supervisor IP should never be banned - if ( - "hassio" in hass.config.components - and hass.components.hassio.get_supervisor_ip() == str(remote_addr) - ): - return + if "hassio" in hass.config.components: + # pylint: disable=import-outside-toplevel + from homeassistant.components import hassio + + if hassio.get_supervisor_ip() == str(remote_addr): + return if ( request.app[KEY_FAILED_LOGIN_ATTEMPTS][remote_addr] diff --git a/homeassistant/components/ozw/__init__.py b/homeassistant/components/ozw/__init__.py index 04c7c3854bc..6aa3bbbcf1c 100644 --- a/homeassistant/components/ozw/__init__.py +++ b/homeassistant/components/ozw/__init__.py @@ -20,7 +20,7 @@ from openzwavemqtt.models.node import OZWNode from openzwavemqtt.models.value import OZWValue from openzwavemqtt.util.mqtt_client import MQTTClient -from homeassistant.components import mqtt +from homeassistant.components import hassio, mqtt from homeassistant.components.hassio.handler import HassioAPIError from homeassistant.config_entries import ConfigEntry, ConfigEntryState from homeassistant.const import EVENT_HOMEASSISTANT_STOP @@ -75,9 +75,7 @@ async def async_setup_entry( # noqa: C901 if entry.data.get(CONF_USE_ADDON): # Do not use MQTT integration. Use own MQTT client. # Retrieve discovery info from the OpenZWave add-on. - discovery_info = await hass.components.hassio.async_get_addon_discovery_info( - "core_zwave" - ) + discovery_info = await hassio.async_get_addon_discovery_info(hass, "core_zwave") if not discovery_info: _LOGGER.error("Failed to get add-on discovery info") @@ -326,12 +324,12 @@ async def async_remove_entry(hass: HomeAssistant, entry: ConfigEntry) -> None: return try: - await hass.components.hassio.async_stop_addon("core_zwave") + await hassio.async_stop_addon(hass, "core_zwave") except HassioAPIError as err: _LOGGER.error("Failed to stop the OpenZWave add-on: %s", err) return try: - await hass.components.hassio.async_uninstall_addon("core_zwave") + await hassio.async_uninstall_addon(hass, "core_zwave") except HassioAPIError as err: _LOGGER.error("Failed to uninstall the OpenZWave add-on: %s", err) diff --git a/homeassistant/components/ozw/config_flow.py b/homeassistant/components/ozw/config_flow.py index e39a3e2ba89..5e745a123f4 100644 --- a/homeassistant/components/ozw/config_flow.py +++ b/homeassistant/components/ozw/config_flow.py @@ -4,6 +4,7 @@ import logging import voluptuous as vol from homeassistant import config_entries +from homeassistant.components import hassio from homeassistant.components.hassio import HassioServiceInfo from homeassistant.core import callback from homeassistant.data_entry_flow import AbortFlow, FlowResult @@ -44,7 +45,7 @@ class DomainConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): # Set a unique_id to make sure discovery flow is aborted on progress. await self.async_set_unique_id(DOMAIN, raise_on_progress=False) - if not self.hass.components.hassio.is_hassio(): + if not hassio.is_hassio(self.hass): return self._async_use_mqtt_integration() return await self.async_step_on_supervisor() @@ -127,7 +128,7 @@ class DomainConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): try: await self.install_task - except self.hass.components.hassio.HassioAPIError as err: + except hassio.HassioAPIError as err: _LOGGER.error("Failed to install OpenZWave add-on: %s", err) return self.async_show_progress_done(next_step_id="install_failed") @@ -159,8 +160,8 @@ class DomainConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): await self._async_set_addon_config(new_addon_config) try: - await self.hass.components.hassio.async_start_addon("core_zwave") - except self.hass.components.hassio.HassioAPIError as err: + await hassio.async_start_addon(self.hass, "core_zwave") + except hassio.HassioAPIError as err: _LOGGER.error("Failed to start OpenZWave add-on: %s", err) errors["base"] = "addon_start_failed" else: @@ -185,10 +186,8 @@ class DomainConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def _async_get_addon_info(self): """Return and cache OpenZWave add-on info.""" try: - addon_info = await self.hass.components.hassio.async_get_addon_info( - "core_zwave" - ) - except self.hass.components.hassio.HassioAPIError as err: + addon_info = await hassio.async_get_addon_info(self.hass, "core_zwave") + except hassio.HassioAPIError as err: _LOGGER.error("Failed to get OpenZWave add-on info: %s", err) raise AbortFlow("addon_info_failed") from err @@ -213,17 +212,15 @@ class DomainConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): """Set OpenZWave add-on config.""" options = {"options": config} try: - await self.hass.components.hassio.async_set_addon_options( - "core_zwave", options - ) - except self.hass.components.hassio.HassioAPIError as err: + await hassio.async_set_addon_options(self.hass, "core_zwave", options) + except hassio.HassioAPIError as err: _LOGGER.error("Failed to set OpenZWave add-on config: %s", err) raise AbortFlow("addon_set_config_failed") from err async def _async_install_addon(self): """Install the OpenZWave add-on.""" try: - await self.hass.components.hassio.async_install_addon("core_zwave") + await hassio.async_install_addon(self.hass, "core_zwave") finally: # Continue the flow after show progress when the task is done. self.hass.async_create_task( diff --git a/homeassistant/components/updater/__init__.py b/homeassistant/components/updater/__init__.py index 4c05931f8fa..6a6264304c9 100644 --- a/homeassistant/components/updater/__init__.py +++ b/homeassistant/components/updater/__init__.py @@ -7,6 +7,7 @@ import async_timeout from awesomeversion import AwesomeVersion import voluptuous as vol +from homeassistant.components import hassio from homeassistant.const import Platform, __version__ as current_version from homeassistant.core import HomeAssistant from homeassistant.helpers import discovery, update_coordinator @@ -79,8 +80,8 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: _LOGGER.debug("Fetched version %s: %s", newest, release_notes) # Load data from Supervisor - if hass.components.hassio.is_hassio(): - core_info = hass.components.hassio.get_core_info() + if hassio.is_hassio(hass): + core_info = hassio.get_core_info(hass) newest = core_info["version_latest"] # Validate version