mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 05:07:41 +00:00
Import hassio (#64561)
* Import hassio * Fix HassioAPIError * Use relative import * Adjust import Co-authored-by: epenet <epenet@users.noreply.github.com>
This commit is contained in:
parent
f622bf4ff2
commit
6f631c542c
@ -403,7 +403,7 @@ def is_hassio(hass: HomeAssistant) -> bool:
|
|||||||
|
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def get_supervisor_ip():
|
def get_supervisor_ip() -> str:
|
||||||
"""Return the supervisor ip address."""
|
"""Return the supervisor ip address."""
|
||||||
if "SUPERVISOR" not in os.environ:
|
if "SUPERVISOR" not in os.environ:
|
||||||
return None
|
return None
|
||||||
|
@ -4,6 +4,8 @@ import os
|
|||||||
from homeassistant.components import system_health
|
from homeassistant.components import system_health
|
||||||
from homeassistant.core import HomeAssistant, callback
|
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"
|
SUPERVISOR_PING = f"http://{os.environ['HASSIO']}/supervisor/ping"
|
||||||
OBSERVER_URL = f"http://{os.environ['HASSIO']}:4357"
|
OBSERVER_URL = f"http://{os.environ['HASSIO']}:4357"
|
||||||
|
|
||||||
@ -18,9 +20,9 @@ def async_register(
|
|||||||
|
|
||||||
async def system_health_info(hass: HomeAssistant):
|
async def system_health_info(hass: HomeAssistant):
|
||||||
"""Get info for the info page."""
|
"""Get info for the info page."""
|
||||||
info = hass.components.hassio.get_info()
|
info = get_info(hass)
|
||||||
host_info = hass.components.hassio.get_host_info()
|
host_info = get_host_info(hass)
|
||||||
supervisor_info = hass.components.hassio.get_supervisor_info()
|
supervisor_info = get_supervisor_info(hass)
|
||||||
|
|
||||||
if supervisor_info.get("healthy"):
|
if supervisor_info.get("healthy"):
|
||||||
healthy = True
|
healthy = True
|
||||||
@ -52,7 +54,7 @@ async def system_health_info(hass: HomeAssistant):
|
|||||||
}
|
}
|
||||||
|
|
||||||
if info.get("hassos") is not None:
|
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["board"] = os_info.get("board")
|
||||||
|
|
||||||
information["supervisor_api"] = system_health.async_check_can_reach_url(
|
information["supervisor_api"] = system_health.async_check_can_reach_url(
|
||||||
|
@ -14,6 +14,7 @@ from homeassistant.helpers.dispatcher import (
|
|||||||
async_dispatcher_send,
|
async_dispatcher_send,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
from . import HassioAPIError
|
||||||
from .const import (
|
from .const import (
|
||||||
ATTR_DATA,
|
ATTR_DATA,
|
||||||
ATTR_ENDPOINT,
|
ATTR_ENDPOINT,
|
||||||
@ -114,8 +115,8 @@ async def websocket_supervisor_api(
|
|||||||
)
|
)
|
||||||
|
|
||||||
if result.get(ATTR_RESULT) == "error":
|
if result.get(ATTR_RESULT) == "error":
|
||||||
raise hass.components.hassio.HassioAPIError(result.get("message"))
|
raise HassioAPIError(result.get("message"))
|
||||||
except hass.components.hassio.HassioAPIError as err:
|
except HassioAPIError as err:
|
||||||
_LOGGER.error("Failed to to call %s - %s", msg[ATTR_ENDPOINT], err)
|
_LOGGER.error("Failed to to call %s - %s", msg[ATTR_ENDPOINT], err)
|
||||||
connection.send_error(
|
connection.send_error(
|
||||||
msg[WS_ID], code=websocket_api.ERR_UNKNOWN_ERROR, message=str(err)
|
msg[WS_ID], code=websocket_api.ERR_UNKNOWN_ERROR, message=str(err)
|
||||||
|
@ -135,11 +135,12 @@ async def process_wrong_login(request: Request) -> None:
|
|||||||
request.app[KEY_FAILED_LOGIN_ATTEMPTS][remote_addr] += 1
|
request.app[KEY_FAILED_LOGIN_ATTEMPTS][remote_addr] += 1
|
||||||
|
|
||||||
# Supervisor IP should never be banned
|
# Supervisor IP should never be banned
|
||||||
if (
|
if "hassio" in hass.config.components:
|
||||||
"hassio" in hass.config.components
|
# pylint: disable=import-outside-toplevel
|
||||||
and hass.components.hassio.get_supervisor_ip() == str(remote_addr)
|
from homeassistant.components import hassio
|
||||||
):
|
|
||||||
return
|
if hassio.get_supervisor_ip() == str(remote_addr):
|
||||||
|
return
|
||||||
|
|
||||||
if (
|
if (
|
||||||
request.app[KEY_FAILED_LOGIN_ATTEMPTS][remote_addr]
|
request.app[KEY_FAILED_LOGIN_ATTEMPTS][remote_addr]
|
||||||
|
@ -20,7 +20,7 @@ from openzwavemqtt.models.node import OZWNode
|
|||||||
from openzwavemqtt.models.value import OZWValue
|
from openzwavemqtt.models.value import OZWValue
|
||||||
from openzwavemqtt.util.mqtt_client import MQTTClient
|
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.components.hassio.handler import HassioAPIError
|
||||||
from homeassistant.config_entries import ConfigEntry, ConfigEntryState
|
from homeassistant.config_entries import ConfigEntry, ConfigEntryState
|
||||||
from homeassistant.const import EVENT_HOMEASSISTANT_STOP
|
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):
|
if entry.data.get(CONF_USE_ADDON):
|
||||||
# Do not use MQTT integration. Use own MQTT client.
|
# Do not use MQTT integration. Use own MQTT client.
|
||||||
# Retrieve discovery info from the OpenZWave add-on.
|
# Retrieve discovery info from the OpenZWave add-on.
|
||||||
discovery_info = await hass.components.hassio.async_get_addon_discovery_info(
|
discovery_info = await hassio.async_get_addon_discovery_info(hass, "core_zwave")
|
||||||
"core_zwave"
|
|
||||||
)
|
|
||||||
|
|
||||||
if not discovery_info:
|
if not discovery_info:
|
||||||
_LOGGER.error("Failed to get add-on 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
|
return
|
||||||
|
|
||||||
try:
|
try:
|
||||||
await hass.components.hassio.async_stop_addon("core_zwave")
|
await hassio.async_stop_addon(hass, "core_zwave")
|
||||||
except HassioAPIError as err:
|
except HassioAPIError as err:
|
||||||
_LOGGER.error("Failed to stop the OpenZWave add-on: %s", err)
|
_LOGGER.error("Failed to stop the OpenZWave add-on: %s", err)
|
||||||
return
|
return
|
||||||
try:
|
try:
|
||||||
await hass.components.hassio.async_uninstall_addon("core_zwave")
|
await hassio.async_uninstall_addon(hass, "core_zwave")
|
||||||
except HassioAPIError as err:
|
except HassioAPIError as err:
|
||||||
_LOGGER.error("Failed to uninstall the OpenZWave add-on: %s", err)
|
_LOGGER.error("Failed to uninstall the OpenZWave add-on: %s", err)
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ import logging
|
|||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant import config_entries
|
from homeassistant import config_entries
|
||||||
|
from homeassistant.components import hassio
|
||||||
from homeassistant.components.hassio import HassioServiceInfo
|
from homeassistant.components.hassio import HassioServiceInfo
|
||||||
from homeassistant.core import callback
|
from homeassistant.core import callback
|
||||||
from homeassistant.data_entry_flow import AbortFlow, FlowResult
|
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.
|
# Set a unique_id to make sure discovery flow is aborted on progress.
|
||||||
await self.async_set_unique_id(DOMAIN, raise_on_progress=False)
|
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 self._async_use_mqtt_integration()
|
||||||
|
|
||||||
return await self.async_step_on_supervisor()
|
return await self.async_step_on_supervisor()
|
||||||
@ -127,7 +128,7 @@ class DomainConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
await self.install_task
|
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)
|
_LOGGER.error("Failed to install OpenZWave add-on: %s", err)
|
||||||
return self.async_show_progress_done(next_step_id="install_failed")
|
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)
|
await self._async_set_addon_config(new_addon_config)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
await self.hass.components.hassio.async_start_addon("core_zwave")
|
await hassio.async_start_addon(self.hass, "core_zwave")
|
||||||
except self.hass.components.hassio.HassioAPIError as err:
|
except hassio.HassioAPIError as err:
|
||||||
_LOGGER.error("Failed to start OpenZWave add-on: %s", err)
|
_LOGGER.error("Failed to start OpenZWave add-on: %s", err)
|
||||||
errors["base"] = "addon_start_failed"
|
errors["base"] = "addon_start_failed"
|
||||||
else:
|
else:
|
||||||
@ -185,10 +186,8 @@ class DomainConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
|
|||||||
async def _async_get_addon_info(self):
|
async def _async_get_addon_info(self):
|
||||||
"""Return and cache OpenZWave add-on info."""
|
"""Return and cache OpenZWave add-on info."""
|
||||||
try:
|
try:
|
||||||
addon_info = await self.hass.components.hassio.async_get_addon_info(
|
addon_info = await hassio.async_get_addon_info(self.hass, "core_zwave")
|
||||||
"core_zwave"
|
except hassio.HassioAPIError as err:
|
||||||
)
|
|
||||||
except self.hass.components.hassio.HassioAPIError as err:
|
|
||||||
_LOGGER.error("Failed to get OpenZWave add-on info: %s", err)
|
_LOGGER.error("Failed to get OpenZWave add-on info: %s", err)
|
||||||
raise AbortFlow("addon_info_failed") from err
|
raise AbortFlow("addon_info_failed") from err
|
||||||
|
|
||||||
@ -213,17 +212,15 @@ class DomainConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
|
|||||||
"""Set OpenZWave add-on config."""
|
"""Set OpenZWave add-on config."""
|
||||||
options = {"options": config}
|
options = {"options": config}
|
||||||
try:
|
try:
|
||||||
await self.hass.components.hassio.async_set_addon_options(
|
await hassio.async_set_addon_options(self.hass, "core_zwave", options)
|
||||||
"core_zwave", options
|
except hassio.HassioAPIError as err:
|
||||||
)
|
|
||||||
except self.hass.components.hassio.HassioAPIError as err:
|
|
||||||
_LOGGER.error("Failed to set OpenZWave add-on config: %s", err)
|
_LOGGER.error("Failed to set OpenZWave add-on config: %s", err)
|
||||||
raise AbortFlow("addon_set_config_failed") from err
|
raise AbortFlow("addon_set_config_failed") from err
|
||||||
|
|
||||||
async def _async_install_addon(self):
|
async def _async_install_addon(self):
|
||||||
"""Install the OpenZWave add-on."""
|
"""Install the OpenZWave add-on."""
|
||||||
try:
|
try:
|
||||||
await self.hass.components.hassio.async_install_addon("core_zwave")
|
await hassio.async_install_addon(self.hass, "core_zwave")
|
||||||
finally:
|
finally:
|
||||||
# Continue the flow after show progress when the task is done.
|
# Continue the flow after show progress when the task is done.
|
||||||
self.hass.async_create_task(
|
self.hass.async_create_task(
|
||||||
|
@ -7,6 +7,7 @@ import async_timeout
|
|||||||
from awesomeversion import AwesomeVersion
|
from awesomeversion import AwesomeVersion
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
|
from homeassistant.components import hassio
|
||||||
from homeassistant.const import Platform, __version__ as current_version
|
from homeassistant.const import Platform, __version__ as current_version
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.helpers import discovery, update_coordinator
|
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)
|
_LOGGER.debug("Fetched version %s: %s", newest, release_notes)
|
||||||
|
|
||||||
# Load data from Supervisor
|
# Load data from Supervisor
|
||||||
if hass.components.hassio.is_hassio():
|
if hassio.is_hassio(hass):
|
||||||
core_info = hass.components.hassio.get_core_info()
|
core_info = hassio.get_core_info(hass)
|
||||||
newest = core_info["version_latest"]
|
newest = core_info["version_latest"]
|
||||||
|
|
||||||
# Validate version
|
# Validate version
|
||||||
|
Loading…
x
Reference in New Issue
Block a user