From b5701c587875a9d4819881b4e254da062933ad4e Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Sun, 23 Jul 2017 00:07:41 +0200 Subject: [PATCH 01/15] Pump dev version to 0.47 --- hassio/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hassio/const.py b/hassio/const.py index 5cf063dbe..047659a7d 100644 --- a/hassio/const.py +++ b/hassio/const.py @@ -1,7 +1,7 @@ """Const file for HassIO.""" from pathlib import Path -HASSIO_VERSION = '0.46' +HASSIO_VERSION = '0.47' URL_HASSIO_VERSION = ('https://raw.githubusercontent.com/home-assistant/' 'hassio/master/version.json') From a13eb7841d58479302deebd4180584b2f9bd9d64 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 23 Jul 2017 11:28:43 -0700 Subject: [PATCH 02/15] Remove not ready for production line --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 5f90e0d2e..e63c1d746 100644 --- a/README.md +++ b/README.md @@ -7,8 +7,6 @@ Hass.io is a Docker based system for managing your Home Assistant installation a [HassIO-Addons](https://github.com/home-assistant/hassio-addons) | [HassIO-Build](https://github.com/home-assistant/hassio-build) -**HassIO is under active development and is not ready yet for production use.** - ## Installation Installation instructions can be found at [https://home-assistant.io/hassio](https://home-assistant.io/hassio). From 44e48095c73bce63131847d9dff627d2f8053956 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 23 Jul 2017 12:11:44 -0700 Subject: [PATCH 03/15] Update license to be Apache 2.0 --- LICENSE | 218 ++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 195 insertions(+), 23 deletions(-) diff --git a/LICENSE b/LICENSE index 586139bab..ff6f65d61 100644 --- a/LICENSE +++ b/LICENSE @@ -1,29 +1,201 @@ -BSD 3-Clause License + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ -Copyright (c) 2017, Pascal Vizeli -All rights reserved. + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: + 1. Definitions. -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. -* Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2017 Pascal Vizeli + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. From c3e1c8b58e83e9affc2891144e7687b7cf494eab Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Mon, 24 Jul 2017 00:46:21 +0200 Subject: [PATCH 04/15] Update resinhup to v0.3 --- version.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.json b/version.json index 5763ceaf5..33be1f8da 100644 --- a/version.json +++ b/version.json @@ -2,7 +2,7 @@ "hassio": "0.46", "homeassistant": "0.49", "resinos": "1.0", - "resinhup": "0.2", + "resinhup": "0.3", "generic": "0.3", "cluster": "0.1" } From 934ca64a32fa9eec4561902843531e70ba50e97b Mon Sep 17 00:00:00 2001 From: pvizeli Date: Mon, 24 Jul 2017 10:30:51 +0200 Subject: [PATCH 05/15] Allow SYS_ADMIN, show devices and privileged on API --- API.md | 4 ++++ hassio/addons/validate.py | 7 ++++--- hassio/api/addons.py | 16 ++++++++++++++-- home-assistant-polymer | 2 +- 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/API.md b/API.md index 7dcc6a304..5946adf57 100644 --- a/API.md +++ b/API.md @@ -293,6 +293,8 @@ Get all available addons "installed": "none|INSTALL_VERSION", "detached": "bool", "build": "bool", + "privileged": ["NET_ADMIN", "SYS_ADMIN"], + "devices": ["/dev/xy"], "url": "null|url", "logo": "bool" } @@ -328,6 +330,8 @@ Get all available addons "options": "{}", "network": "{}|null", "host_network": "bool", + "privileged": ["NET_ADMIN", "SYS_ADMIN"], + "devices": ["/dev/xy"], "logo": "bool", "webui": "null|http(s)://[HOST]:port/xy/zx" } diff --git a/hassio/addons/validate.py b/hassio/addons/validate.py index 258f55d30..d54713ce3 100644 --- a/hassio/addons/validate.py +++ b/hassio/addons/validate.py @@ -35,8 +35,9 @@ STARTUP_ALL = [ STARTUP_APPLICATION ] -PRIVILEGE_ALL = [ - "NET_ADMIN" +PRIVILEGED_ALL = [ + "NET_ADMIN", + "SYS_ADMIN", ] @@ -73,7 +74,7 @@ SCHEMA_ADDON_CONFIG = vol.Schema({ vol.Match(r"^size=(\d)*[kmg](,uid=\d{1,4})?(,rw)?$"), vol.Optional(ATTR_MAP, default=[]): [vol.Match(MAP_VOLUME)], vol.Optional(ATTR_ENVIRONMENT): {vol.Match(r"\w*"): vol.Coerce(str)}, - vol.Optional(ATTR_PRIVILEGED): [vol.In(PRIVILEGE_ALL)], + vol.Optional(ATTR_PRIVILEGED): [vol.In(PRIVILEGED_ALL)], vol.Required(ATTR_OPTIONS): dict, vol.Required(ATTR_SCHEMA): vol.Any(vol.Schema({ vol.Coerce(str): vol.Any(ADDON_ELEMENT, [ diff --git a/hassio/api/addons.py b/hassio/api/addons.py index 08925ad71..c04001058 100644 --- a/hassio/api/addons.py +++ b/hassio/api/addons.py @@ -11,8 +11,8 @@ from ..const import ( ATTR_URL, ATTR_DESCRIPTON, ATTR_DETACHED, ATTR_NAME, ATTR_REPOSITORY, ATTR_BUILD, ATTR_AUTO_UPDATE, ATTR_NETWORK, ATTR_HOST_NETWORK, ATTR_SLUG, ATTR_SOURCE, ATTR_REPOSITORIES, ATTR_ADDONS, ATTR_ARCH, ATTR_MAINTAINER, - ATTR_INSTALLED, ATTR_LOGO, ATTR_WEBUI, BOOT_AUTO, BOOT_MANUAL, - CONTENT_TYPE_PNG, CONTENT_TYPE_BINARY) + ATTR_INSTALLED, ATTR_LOGO, ATTR_WEBUI, ATTR_DEVICES, ATTR_PRIVILEGED, + BOOT_AUTO, BOOT_MANUAL, CONTENT_TYPE_PNG, CONTENT_TYPE_BINARY) from ..validate import DOCKER_PORTS _LOGGER = logging.getLogger(__name__) @@ -49,6 +49,14 @@ class APIAddons(object): return addon + @staticmethod + def _pretty_devces(addon): + """Return a simplified device list.""" + dev_list = addon.devices + if not dev_list: + return [] + return [row.split(':')[0] for row in dev_list] + @api_process async def list(self, request): """Return all addons / repositories .""" @@ -64,6 +72,8 @@ class APIAddons(object): ATTR_DETACHED: addon.is_detached, ATTR_REPOSITORY: addon.repository, ATTR_BUILD: addon.need_build, + ATTR_PRIVILEGED: addon.privileged, + ATTR_DEVICES: self._pretty_devces(addon), ATTR_URL: addon.url, ATTR_LOGO: addon.with_logo, }) @@ -109,6 +119,8 @@ class APIAddons(object): ATTR_BUILD: addon.need_build, ATTR_NETWORK: addon.ports, ATTR_HOST_NETWORK: addon.network_mode == 'host', + ATTR_PRIVILEGED: addon.privileged, + ATTR_DEVICES: self._pretty_devces(addon), ATTR_LOGO: addon.with_logo, ATTR_WEBUI: addon.webui, } diff --git a/home-assistant-polymer b/home-assistant-polymer index 5cdba73ba..d2a56655d 160000 --- a/home-assistant-polymer +++ b/home-assistant-polymer @@ -1 +1 @@ -Subproject commit 5cdba73bacdbdf8a9cb1b95f55b2fdd44ae49a78 +Subproject commit d2a56655d086a040e712680e46e191d78949dfa3 From e78d935824242c8b2f9b5afb2c4ff99544ea0527 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Mon, 24 Jul 2017 10:33:04 +0200 Subject: [PATCH 06/15] fix spell --- hassio/api/addons.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hassio/api/addons.py b/hassio/api/addons.py index c04001058..bfdc03780 100644 --- a/hassio/api/addons.py +++ b/hassio/api/addons.py @@ -50,7 +50,7 @@ class APIAddons(object): return addon @staticmethod - def _pretty_devces(addon): + def _pretty_devices(addon): """Return a simplified device list.""" dev_list = addon.devices if not dev_list: @@ -73,7 +73,7 @@ class APIAddons(object): ATTR_REPOSITORY: addon.repository, ATTR_BUILD: addon.need_build, ATTR_PRIVILEGED: addon.privileged, - ATTR_DEVICES: self._pretty_devces(addon), + ATTR_DEVICES: self._pretty_devices(addon), ATTR_URL: addon.url, ATTR_LOGO: addon.with_logo, }) @@ -120,7 +120,7 @@ class APIAddons(object): ATTR_NETWORK: addon.ports, ATTR_HOST_NETWORK: addon.network_mode == 'host', ATTR_PRIVILEGED: addon.privileged, - ATTR_DEVICES: self._pretty_devces(addon), + ATTR_DEVICES: self._pretty_devices(addon), ATTR_LOGO: addon.with_logo, ATTR_WEBUI: addon.webui, } From 4915c935dd10df08ae93cac5dd49a740ed79b0f2 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Mon, 24 Jul 2017 10:36:47 +0200 Subject: [PATCH 07/15] use set for speedup --- hassio/api/addons.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hassio/api/addons.py b/hassio/api/addons.py index bfdc03780..5509713eb 100644 --- a/hassio/api/addons.py +++ b/hassio/api/addons.py @@ -54,8 +54,8 @@ class APIAddons(object): """Return a simplified device list.""" dev_list = addon.devices if not dev_list: - return [] - return [row.split(':')[0] for row in dev_list] + return + return set(row.split(':')[0] for row in dev_list) @api_process async def list(self, request): From d1f265da9eef25650cef393b05c43c39ff9130c4 Mon Sep 17 00:00:00 2001 From: pvizeli Date: Mon, 24 Jul 2017 10:44:23 +0200 Subject: [PATCH 08/15] Update UI --- home-assistant-polymer | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/home-assistant-polymer b/home-assistant-polymer index d2a56655d..0c428134d 160000 --- a/home-assistant-polymer +++ b/home-assistant-polymer @@ -1 +1 @@ -Subproject commit d2a56655d086a040e712680e46e191d78949dfa3 +Subproject commit 0c428134dfb6374b4a120cb729396242b4c2f2d7 From 3272403141ce2d8a62f25a785a9a6adfd002581f Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Mon, 24 Jul 2017 10:58:32 +0200 Subject: [PATCH 09/15] Update frontend --- hassio/panel/hassio-main.html | 2 +- hassio/panel/hassio-main.html.gz | Bin 45110 -> 45117 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/hassio/panel/hassio-main.html b/hassio/panel/hassio-main.html index 6fea41309..6de0696ad 100644 --- a/hassio/panel/hassio-main.html +++ b/hassio/panel/hassio-main.html @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/hassio/panel/hassio-main.html.gz b/hassio/panel/hassio-main.html.gz index 2cda7e9f251008cbdcee18c2d4837204ad58e38a..ff664c823dcee4d00883627b8ea571675e396da8 100644 GIT binary patch delta 36886 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 mB8KLM!%g(uOqP|=_`u_nIOR1_LAp-yuL>bZm delta 36990 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 From 7a59e7392ba5866991d73441fffc46b98df8ea6c Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Mon, 24 Jul 2017 12:05:23 +0200 Subject: [PATCH 10/15] update name --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e63c1d746..fdef404aa 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# HassIO +# Hass.io ### First private cloud solution for home automation. Hass.io is a Docker based system for managing your Home Assistant installation and related applications. The system is controlled via Home Assistant which communicates with the supervisor. The supervisor provides an API to manage the installation. This includes changing network settings or installing and updating software. From a98d76618aee2ff9bdc755ff194f29d2ca7bae9c Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Mon, 24 Jul 2017 12:13:16 +0200 Subject: [PATCH 11/15] Update tasks.py (#110) --- hassio/tasks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hassio/tasks.py b/hassio/tasks.py index a3421b560..3bf328e9c 100644 --- a/hassio/tasks.py +++ b/hassio/tasks.py @@ -27,7 +27,7 @@ def addons_update(loop, addons): if not addon.is_installed or not addon.auto_update: continue - if addon.version_installed != addon.version: + if addon.version_installed != addon.last_version: tasks.append(addon.update()) if tasks: From 12a2ccf0ec551694ff99b332e9af5ea10beee9c2 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Mon, 24 Jul 2017 22:42:48 +0200 Subject: [PATCH 12/15] Update HomeAssistant 0.49.1 --- version.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.json b/version.json index 33be1f8da..cb8d8bebd 100644 --- a/version.json +++ b/version.json @@ -1,6 +1,6 @@ { "hassio": "0.46", - "homeassistant": "0.49", + "homeassistant": "0.49.1", "resinos": "1.0", "resinhup": "0.3", "generic": "0.3", From 282fc03687bd3f69d971e7669ff2886dc4daf9d3 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Mon, 24 Jul 2017 23:35:22 +0200 Subject: [PATCH 13/15] Look schema for update (#111) * Check valid schema for update * fix merge options * fix style & return value * simplify --- hassio/addons/addon.py | 30 ++++++++++++++++++++++++++++++ hassio/addons/validate.py | 2 +- hassio/tasks.py | 8 +++++++- 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/hassio/addons/addon.py b/hassio/addons/addon.py index c5b048fe7..cea570caa 100644 --- a/hassio/addons/addon.py +++ b/hassio/addons/addon.py @@ -336,6 +336,36 @@ class Addon(object): return vol.Schema(dict) return vol.Schema(vol.All(dict, validate_options(raw_schema))) + def test_udpate_schema(self): + """Check if the exists config valid after update.""" + if not self.is_installed or self.is_detached: + return True + + # load next schema + new_raw_schema = self.data.cache[self._id][ATTR_SCHEMA] + default_options = self.data.cache[self._id][ATTR_OPTIONS] + + # if disabled + if isinstance(new_raw_schema, bool): + return True + + # merge options + options = { + **self.data.user[self._id][ATTR_OPTIONS], + **default_options, + } + + # create voluptuous + new_schema = \ + vol.Schema(vol.All(dict, validate_options(new_raw_schema))) + + # validate + try: + new_schema(options) + except vol.Invalid: + return False + return True + async def install(self, version=None): """Install a addon.""" if self.config.arch not in self.supported_arch: diff --git a/hassio/addons/validate.py b/hassio/addons/validate.py index d54713ce3..320b8a8b3 100644 --- a/hassio/addons/validate.py +++ b/hassio/addons/validate.py @@ -98,7 +98,7 @@ SCHEMA_REPOSITORY_CONFIG = vol.Schema({ # pylint: disable=no-value-for-parameter SCHEMA_ADDON_USER = vol.Schema({ vol.Required(ATTR_VERSION): vol.Coerce(str), - vol.Required(ATTR_OPTIONS): dict, + vol.Optional(ATTR_OPTIONS, default={}): dict, vol.Optional(ATTR_AUTO_UPDATE, default=False): vol.Boolean(), vol.Optional(ATTR_BOOT): vol.In([BOOT_AUTO, BOOT_MANUAL]), diff --git a/hassio/tasks.py b/hassio/tasks.py index 3bf328e9c..7fd888869 100644 --- a/hassio/tasks.py +++ b/hassio/tasks.py @@ -27,8 +27,14 @@ def addons_update(loop, addons): if not addon.is_installed or not addon.auto_update: continue - if addon.version_installed != addon.last_version: + if addon.version_installed == addon.last_version: + continue + + if addon.test_udpate_schema(): tasks.append(addon.update()) + else: + _LOGGER.warning( + "Addon %s will be ignore, schema tests fails", addon.slug) if tasks: _LOGGER.info("Addon auto update process %d tasks", len(tasks)) From dae49df7b1c0d5d6a463f8aae6dbb14eb1f7a18f Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Mon, 24 Jul 2017 23:42:28 +0200 Subject: [PATCH 14/15] Update Hass.io to 0.47 --- version.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.json b/version.json index cb8d8bebd..f8e6466ff 100644 --- a/version.json +++ b/version.json @@ -1,5 +1,5 @@ { - "hassio": "0.46", + "hassio": "0.47", "homeassistant": "0.49.1", "resinos": "1.0", "resinhup": "0.3", From 863456525f4cf59704ad6c8ba463752398c52d34 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Tue, 25 Jul 2017 00:01:02 +0200 Subject: [PATCH 15/15] fix json validate (#112) --- hassio/api/addons.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hassio/api/addons.py b/hassio/api/addons.py index 5509713eb..f98a19098 100644 --- a/hassio/api/addons.py +++ b/hassio/api/addons.py @@ -55,7 +55,7 @@ class APIAddons(object): dev_list = addon.devices if not dev_list: return - return set(row.split(':')[0] for row in dev_list) + return [row.split(':')[0] for row in dev_list] @api_process async def list(self, request):