From 56a9f64730fa1f036d9bfc7269831af50520782d Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Wed, 28 Jun 2017 23:06:06 +0200 Subject: [PATCH] Fix write options handling (#84) * Fix write options handling * Fix bug --- hassio/addons/addon.py | 8 +------- hassio/api/addons.py | 10 +++++++++- hassio/dock/addon.py | 6 +++++- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/hassio/addons/addon.py b/hassio/addons/addon.py index 7b8da7299..c43b01558 100644 --- a/hassio/addons/addon.py +++ b/hassio/addons/addon.py @@ -235,7 +235,7 @@ class Addon(object): """Return path to this addon.""" return Path(self._mesh[ATTR_LOCATON]) - def write_addon_options(self): + def write_options(self): """Return True if addon options is written to data.""" schema = self.schema options = self.options @@ -313,9 +313,6 @@ class Addon(object): _LOGGER.error("Addon %s is not installed", self._id) return False - if not self.write_addon_options(): - return False - return await self.addon_docker.run() async def stop(self): @@ -350,9 +347,6 @@ class Addon(object): _LOGGER.error("Addon %s is not installed", self._id) return False - if not self.write_addon_options(): - return False - return await self.addon_docker.restart() async def logs(self): diff --git a/hassio/api/addons.py b/hassio/api/addons.py index 68f625550..eb45e3f4d 100644 --- a/hassio/api/addons.py +++ b/hassio/api/addons.py @@ -3,6 +3,7 @@ import asyncio import logging import voluptuous as vol +from voluptuous.humanize import humanize_error from .util import api_process, api_process_raw, api_validate from ..const import ( @@ -92,13 +93,20 @@ class APIAddons(object): async def uninstall(self, request): """Uninstall addon.""" addon = self._extract_addon(request) - return await asyncio.shield(addon.uninstall(), loop=self.loop) @api_process async def start(self, request): """Start addon.""" addon = self._extract_addon(request) + + # check options + options = addon.options + try: + addon.schema(options) + except vol.Invalid as ex: + raise RuntimeError(humanize_error(options, ex)) from None + return await asyncio.shield(addon.start(), loop=self.loop) @api_process diff --git a/hassio/dock/addon.py b/hassio/dock/addon.py index 1f6b1a317..ffa0e9e21 100644 --- a/hassio/dock/addon.py +++ b/hassio/dock/addon.py @@ -94,11 +94,15 @@ class DockerAddon(DockerBase): Need run inside executor. """ if self._is_running(): - return + return True # cleanup self._stop() + # write config + if not self.addon.write_options(): + return False + try: self.dock.containers.run( self.image,