Skip to content

Commit ed2caa0

Browse files
authored
Merge pull request #100 from home-assistant/dev
Release 0.44
2 parents bfa7443 + 0b04c90 commit ed2caa0

File tree

4 files changed

+67
-28
lines changed

4 files changed

+67
-28
lines changed

hassio/addons/validate.py

Lines changed: 50 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@
33

44
from ..const import (
55
ATTR_NAME, ATTR_VERSION, ATTR_SLUG, ATTR_DESCRIPTON, ATTR_STARTUP,
6-
ATTR_BOOT, ATTR_MAP, ATTR_OPTIONS, ATTR_PORTS, STARTUP_ONCE, STARTUP_AFTER,
7-
STARTUP_BEFORE, STARTUP_INITIALIZE, BOOT_AUTO, BOOT_MANUAL, ATTR_SCHEMA,
8-
ATTR_IMAGE, ATTR_URL, ATTR_MAINTAINER, ATTR_ARCH, ATTR_DEVICES,
9-
ATTR_ENVIRONMENT, ATTR_HOST_NETWORK, ARCH_ARMHF, ARCH_AARCH64, ARCH_AMD64,
10-
ARCH_I386, ATTR_TMPFS, ATTR_PRIVILEGED, ATTR_USER, ATTR_STATE, ATTR_SYSTEM,
11-
STATE_STARTED, STATE_STOPPED, ATTR_LOCATON, ATTR_REPOSITORY, ATTR_TIMEOUT,
12-
ATTR_NETWORK, ATTR_AUTO_UPDATE)
6+
ATTR_BOOT, ATTR_MAP, ATTR_OPTIONS, ATTR_PORTS, STARTUP_ONCE,
7+
STARTUP_SYSTEM, STARTUP_SERVICES, STARTUP_APPLICATION, STARTUP_INITIALIZE,
8+
BOOT_AUTO, BOOT_MANUAL, ATTR_SCHEMA, ATTR_IMAGE, ATTR_URL, ATTR_MAINTAINER,
9+
ATTR_ARCH, ATTR_DEVICES, ATTR_ENVIRONMENT, ATTR_HOST_NETWORK, ARCH_ARMHF,
10+
ARCH_AARCH64, ARCH_AMD64, ARCH_I386, ATTR_TMPFS, ATTR_PRIVILEGED,
11+
ATTR_USER, ATTR_STATE, ATTR_SYSTEM, STATE_STARTED, STATE_STOPPED,
12+
ATTR_LOCATON, ATTR_REPOSITORY, ATTR_TIMEOUT, ATTR_NETWORK,
13+
ATTR_AUTO_UPDATE)
1314
from ..validate import NETWORK_PORT, DOCKER_PORTS
1415

1516

@@ -29,11 +30,28 @@
2930
ARCH_ARMHF, ARCH_AARCH64, ARCH_AMD64, ARCH_I386
3031
]
3132

33+
STARTUP_ALL = [
34+
STARTUP_ONCE, STARTUP_INITIALIZE, STARTUP_SYSTEM, STARTUP_SERVICES,
35+
STARTUP_APPLICATION
36+
]
37+
3238
PRIVILEGE_ALL = [
3339
"NET_ADMIN"
3440
]
3541

3642

43+
def _migrate_startup(value):
44+
"""Migrate startup schema.
45+
46+
REMOVE after 0.50-
47+
"""
48+
if value == "before":
49+
return STARTUP_SERVICES
50+
if value == "after":
51+
return STARTUP_APPLICATION
52+
return value
53+
54+
3755
# pylint: disable=no-value-for-parameter
3856
SCHEMA_ADDON_CONFIG = vol.Schema({
3957
vol.Required(ATTR_NAME): vol.Coerce(str),
@@ -43,8 +61,7 @@
4361
vol.Optional(ATTR_URL): vol.Url(),
4462
vol.Optional(ATTR_ARCH, default=ARCH_ALL): [vol.In(ARCH_ALL)],
4563
vol.Required(ATTR_STARTUP):
46-
vol.In([STARTUP_BEFORE, STARTUP_AFTER, STARTUP_ONCE,
47-
STARTUP_INITIALIZE]),
64+
vol.All(_migrate_startup, vol.In(STARTUP_ALL)),
4865
vol.Required(ATTR_BOOT):
4966
vol.In([BOOT_AUTO, BOOT_MANUAL]),
5067
vol.Optional(ATTR_PORTS): DOCKER_PORTS,
@@ -56,11 +73,11 @@
5673
vol.Optional(ATTR_ENVIRONMENT): {vol.Match(r"\w*"): vol.Coerce(str)},
5774
vol.Optional(ATTR_PRIVILEGED): [vol.In(PRIVILEGE_ALL)],
5875
vol.Required(ATTR_OPTIONS): dict,
59-
vol.Required(ATTR_SCHEMA): vol.Any({
76+
vol.Required(ATTR_SCHEMA): vol.Any(vol.Schema({
6077
vol.Coerce(str): vol.Any(ADDON_ELEMENT, [
6178
vol.Any(ADDON_ELEMENT, {vol.Coerce(str): ADDON_ELEMENT})
62-
])
63-
}, False),
79+
], vol.Schema({vol.Coerce(str): ADDON_ELEMENT}))
80+
}), False),
6481
vol.Optional(ATTR_IMAGE): vol.Match(r"\w*/\w*"),
6582
vol.Optional(ATTR_TIMEOUT, default=10):
6683
vol.All(vol.Coerce(int), vol.Range(min=10, max=120))
@@ -124,8 +141,11 @@ def validate(struct):
124141
typ = raw_schema[key]
125142
try:
126143
if isinstance(typ, list):
127-
# nested value
128-
options[key] = _nested_validate(typ[0], value, key)
144+
# nested value list
145+
options[key] = _nested_validate_list(typ[0], value, key)
146+
elif isinstance(typ, dict):
147+
# nested value dict
148+
options[key] = _nested_validate_dict(typ, value, key)
129149
else:
130150
# normal value
131151
options[key] = _single_validate(typ, value, key)
@@ -161,13 +181,13 @@ def _single_validate(typ, value, key):
161181
elif typ == V_PORT:
162182
return NETWORK_PORT(value)
163183

164-
raise vol.Invalid("Fatal error for {} type {}.".format(key, typ))
184+
raise vol.Invalid("Fatal error for {} type {}".format(key, typ))
165185
except ValueError:
166186
raise vol.Invalid(
167187
"Type {} error for '{}' on {}.".format(typ, value, key)) from None
168188

169189

170-
def _nested_validate(typ, data_list, key):
190+
def _nested_validate_list(typ, data_list, key):
171191
"""Validate nested items."""
172192
options = []
173193

@@ -178,7 +198,7 @@ def _nested_validate(typ, data_list, key):
178198
for c_key, c_value in element.items():
179199
if c_key not in typ:
180200
raise vol.Invalid(
181-
"Unknown nested options {}.".format(c_key))
201+
"Unknown nested options {}".format(c_key))
182202

183203
c_options[c_key] = _single_validate(typ[c_key], c_value, c_key)
184204
options.append(c_options)
@@ -187,3 +207,16 @@ def _nested_validate(typ, data_list, key):
187207
options.append(_single_validate(typ, element, key))
188208

189209
return options
210+
211+
212+
def _nested_validate_dict(typ, data_dict, key):
213+
"""Validate nested items."""
214+
options = {}
215+
216+
for c_key, c_value in data_dict.items():
217+
if c_key not in typ:
218+
raise vol.Invalid("Unknow nested dict options {}".format(c_key))
219+
220+
options[c_key] = _single_validate(typ[c_key], c_value, c_key)
221+
222+
return options

hassio/const.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
"""Const file for HassIO."""
22
from pathlib import Path
33

4-
HASSIO_VERSION = '0.43'
4+
HASSIO_VERSION = '0.44'
55

66
URL_HASSIO_VERSION = ('https://raw.githubusercontent.com/home-assistant/'
77
'hassio/master/version.json')
@@ -98,8 +98,9 @@
9898
ATTR_CUSTOM = 'custom'
9999

100100
STARTUP_INITIALIZE = 'initialize'
101-
STARTUP_BEFORE = 'before'
102-
STARTUP_AFTER = 'after'
101+
STARTUP_SYSTEM = 'system'
102+
STARTUP_SERVICES = 'services'
103+
STARTUP_APPLICATION = 'application'
103104
STARTUP_ONCE = 'once'
104105

105106
BOOT_AUTO = 'auto'

hassio/core.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@
1111
from .const import (
1212
SOCKET_DOCKER, RUN_UPDATE_INFO_TASKS, RUN_RELOAD_ADDONS_TASKS,
1313
RUN_UPDATE_SUPERVISOR_TASKS, RUN_WATCHDOG_HOMEASSISTANT,
14-
RUN_CLEANUP_API_SESSIONS, STARTUP_AFTER, STARTUP_BEFORE,
15-
STARTUP_INITIALIZE, RUN_RELOAD_SNAPSHOTS_TASKS, RUN_UPDATE_ADDONS_TASKS)
14+
RUN_CLEANUP_API_SESSIONS, STARTUP_SYSTEM, STARTUP_SERVICES,
15+
STARTUP_APPLICATION, STARTUP_INITIALIZE, RUN_RELOAD_SNAPSHOTS_TASKS,
16+
RUN_UPDATE_ADDONS_TASKS)
1617
from .homeassistant import HomeAssistant
1718
from .scheduler import Scheduler
1819
from .dock.supervisor import DockerSupervisor
@@ -133,20 +134,23 @@ async def start(self):
133134
await self.api.start()
134135
_LOGGER.info("Start hassio api on %s", self.config.api_endpoint)
135136

137+
# start addon mark as system
138+
await self.addons.auto_boot(STARTUP_SYSTEM)
139+
136140
try:
137141
# HomeAssistant is already running / supervisor have only reboot
138142
if await self.homeassistant.is_running():
139143
_LOGGER.info("HassIO reboot detected")
140144
return
141145

142-
# start addon mark as before
143-
await self.addons.auto_boot(STARTUP_BEFORE)
146+
# start addon mark as services
147+
await self.addons.auto_boot(STARTUP_SERVICES)
144148

145149
# run HomeAssistant
146150
await self.homeassistant.run()
147151

148-
# start addon mark as after
149-
await self.addons.auto_boot(STARTUP_AFTER)
152+
# start addon mark as application
153+
await self.addons.auto_boot(STARTUP_APPLICATION)
150154

151155
finally:
152156
# schedule homeassistant watchdog

version.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
{
2-
"hassio": "0.43",
2+
"hassio": "0.44",
33
"homeassistant": "0.48.1",
44
"resinos": "0.8",
55
"resinhup": "0.1",
6-
"generic": "0.3"
6+
"generic": "0.3",
7+
"cluster": "0.1"
78
}

0 commit comments

Comments
 (0)