mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-17 22:26:30 +00:00
add logoutbut (#29)
* add logoutbut * Protect host update * schedule a hostcontrol update task * change log level * cleanup names
This commit is contained in:
parent
f6048467ad
commit
19b72b1a79
@ -1,4 +1,5 @@
|
|||||||
"""Init file for HassIO host rest api."""
|
"""Init file for HassIO host rest api."""
|
||||||
|
import asyncio
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
@ -30,7 +31,7 @@ class APIHost(object):
|
|||||||
return {
|
return {
|
||||||
ATTR_TYPE: self.host_control.type,
|
ATTR_TYPE: self.host_control.type,
|
||||||
ATTR_VERSION: self.host_control.version,
|
ATTR_VERSION: self.host_control.version,
|
||||||
ATTR_LAST_VERSION: self.host_control.last,
|
ATTR_LAST_VERSION: self.host_control.last_version,
|
||||||
ATTR_FEATURES: self.host_control.features,
|
ATTR_FEATURES: self.host_control.features,
|
||||||
ATTR_HOSTNAME: self.host_control.hostname,
|
ATTR_HOSTNAME: self.host_control.hostname,
|
||||||
ATTR_OS: self.host_control.os_info,
|
ATTR_OS: self.host_control.os_info,
|
||||||
@ -50,9 +51,10 @@ class APIHost(object):
|
|||||||
async def update(self, request):
|
async def update(self, request):
|
||||||
"""Update host OS."""
|
"""Update host OS."""
|
||||||
body = await api_validate(SCHEMA_VERSION, request)
|
body = await api_validate(SCHEMA_VERSION, request)
|
||||||
version = body.get(ATTR_VERSION)
|
version = body.get(ATTR_VERSION, self.host_control.last_version)
|
||||||
|
|
||||||
if version == self.host_control.version:
|
if version == self.host_control.version:
|
||||||
raise RuntimeError("Version is already in use")
|
raise RuntimeError("Version is already in use")
|
||||||
|
|
||||||
return await self.host_control.update(version=version)
|
return await asyncio.shield(
|
||||||
|
self.host_control.update(version=version), loop=self.loop)
|
||||||
|
@ -9,7 +9,7 @@ from voluptuous.humanize import humanize_error
|
|||||||
|
|
||||||
from .const import FILE_HASSIO_CONFIG, HASSIO_SHARE
|
from .const import FILE_HASSIO_CONFIG, HASSIO_SHARE
|
||||||
from .tools import (
|
from .tools import (
|
||||||
fetch_current_versions, write_json_file, read_json_file)
|
fetch_last_versions, write_json_file, read_json_file)
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -87,7 +87,7 @@ class CoreConfig(Config):
|
|||||||
|
|
||||||
async def fetch_update_infos(self):
|
async def fetch_update_infos(self):
|
||||||
"""Read current versions from web."""
|
"""Read current versions from web."""
|
||||||
last = await fetch_current_versions(
|
last = await fetch_last_versions(
|
||||||
self.websession, beta=self.upstream_beta)
|
self.websession, beta=self.upstream_beta)
|
||||||
|
|
||||||
if last:
|
if last:
|
||||||
|
@ -63,6 +63,10 @@ class HassIO(object):
|
|||||||
self.host_control.version, self.host_control.hostname,
|
self.host_control.version, self.host_control.hostname,
|
||||||
self.host_control.features)
|
self.host_control.features)
|
||||||
|
|
||||||
|
# schedule update info tasks
|
||||||
|
self.scheduler.register_task(
|
||||||
|
self.host_control.load(), RUN_UPDATE_INFO_TASKS)
|
||||||
|
|
||||||
# rest api views
|
# rest api views
|
||||||
self.api.register_host(self.host_control)
|
self.api.register_host(self.host_control)
|
||||||
self.api.register_network(self.host_control)
|
self.api.register_network(self.host_control)
|
||||||
|
@ -29,7 +29,7 @@ class HostControl(object):
|
|||||||
self.loop = loop
|
self.loop = loop
|
||||||
self.active = False
|
self.active = False
|
||||||
self.version = UNKNOWN
|
self.version = UNKNOWN
|
||||||
self.last = UNKNOWN
|
self.last_version = UNKNOWN
|
||||||
self.type = UNKNOWN
|
self.type = UNKNOWN
|
||||||
self.features = []
|
self.features = []
|
||||||
self.hostname = UNKNOWN
|
self.hostname = UNKNOWN
|
||||||
@ -58,7 +58,7 @@ class HostControl(object):
|
|||||||
data = await reader.readline()
|
data = await reader.readline()
|
||||||
|
|
||||||
response = data.decode()
|
response = data.decode()
|
||||||
_LOGGER.debug("Receive from HostControl: %s.", response)
|
_LOGGER.info("Receive from HostControl: %s.", response)
|
||||||
|
|
||||||
if response == "OK":
|
if response == "OK":
|
||||||
return True
|
return True
|
||||||
@ -70,7 +70,8 @@ class HostControl(object):
|
|||||||
try:
|
try:
|
||||||
return json.loads(response)
|
return json.loads(response)
|
||||||
except json.JSONDecodeError:
|
except json.JSONDecodeError:
|
||||||
_LOGGER.warning("Json parse error from HostControl.")
|
_LOGGER.warning("Json parse error from HostControl '%s'.",
|
||||||
|
response)
|
||||||
|
|
||||||
except asyncio.TimeoutError:
|
except asyncio.TimeoutError:
|
||||||
_LOGGER.error("Timeout from HostControl!")
|
_LOGGER.error("Timeout from HostControl!")
|
||||||
@ -88,7 +89,7 @@ class HostControl(object):
|
|||||||
return
|
return
|
||||||
|
|
||||||
self.version = info.get(ATTR_VERSION, UNKNOWN)
|
self.version = info.get(ATTR_VERSION, UNKNOWN)
|
||||||
self.last = info.get(ATTR_LAST_VERSION, UNKNOWN)
|
self.last_version = info.get(ATTR_LAST_VERSION, UNKNOWN)
|
||||||
self.type = info.get(ATTR_TYPE, UNKNOWN)
|
self.type = info.get(ATTR_TYPE, UNKNOWN)
|
||||||
self.features = info.get(ATTR_FEATURES, [])
|
self.features = info.get(ATTR_FEATURES, [])
|
||||||
self.hostname = info.get(ATTR_HOSTNAME, UNKNOWN)
|
self.hostname = info.get(ATTR_HOSTNAME, UNKNOWN)
|
||||||
|
@ -16,7 +16,7 @@ _RE_VERSION = re.compile(r"VERSION=(.*)")
|
|||||||
_IMAGE_ARCH = re.compile(r".*/([a-z0-9]*)-hassio-supervisor")
|
_IMAGE_ARCH = re.compile(r".*/([a-z0-9]*)-hassio-supervisor")
|
||||||
|
|
||||||
|
|
||||||
async def fetch_current_versions(websession, beta=False):
|
async def fetch_last_versions(websession, beta=False):
|
||||||
"""Fetch current versions from github.
|
"""Fetch current versions from github.
|
||||||
|
|
||||||
Is a coroutine.
|
Is a coroutine.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user