From 1c7b1f1462efd8f26e47c06af344ab7e005fd3af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Sun, 30 Aug 2020 17:58:13 +0200 Subject: [PATCH] Adds options_validate API (#1996) --- API.md | 1 + supervisor/api/__init__.py | 3 +++ supervisor/api/addons.py | 10 ++++++++++ 3 files changed, 14 insertions(+) diff --git a/API.md b/API.md index 12bbb3df1..8a309ed99 100644 --- a/API.md +++ b/API.md @@ -619,6 +619,7 @@ Get all available add-ons. - GET `/addons/{addon}/changelog` - GET `/addons/{addon}/documentation` - POST `/addons/{addon}/options` +- POST `/addons/{addon}/options/validate` ```json { diff --git a/supervisor/api/__init__.py b/supervisor/api/__init__.py index d711384fd..7dcb548ba 100644 --- a/supervisor/api/__init__.py +++ b/supervisor/api/__init__.py @@ -268,6 +268,9 @@ class RestAPI(CoreSysAttributes): web.post("/addons/{addon}/restart", api_addons.restart), web.post("/addons/{addon}/update", api_addons.update), web.post("/addons/{addon}/options", api_addons.options), + web.post( + "/addons/{addon}/options/validate", api_addons.options_validate + ), web.post("/addons/{addon}/rebuild", api_addons.rebuild), web.get("/addons/{addon}/logs", api_addons.logs), web.get("/addons/{addon}/icon", api_addons.icon), diff --git a/supervisor/api/addons.py b/supervisor/api/addons.py index c01e442ac..b0ae1c2ef 100644 --- a/supervisor/api/addons.py +++ b/supervisor/api/addons.py @@ -5,6 +5,7 @@ from typing import Any, Awaitable, Dict, List from aiohttp import web import voluptuous as vol +from voluptuous.humanize import humanize_error from ..addons import AnyAddon from ..addons.addon import Addon @@ -315,6 +316,15 @@ class APIAddons(CoreSysAttributes): addon.save_persist() + @api_process + async def options_validate(self, request: web.Request) -> None: + """Validate user options for add-on.""" + addon = self._extract_addon_installed(request) + try: + addon.schema(addon.options) + except vol.Invalid as ex: + raise APIError(humanize_error(addon.options, ex)) from None + @api_process async def security(self, request: web.Request) -> None: """Store security options for add-on."""