From b82dbc0cac0d9b1051841119b67b317e1e756b51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Thu, 9 Jun 2022 13:47:15 +0200 Subject: [PATCH] Extended store addon info (#3678) * Add extended store addon info * Add missing hassio_api * Fix test --- supervisor/api/store.py | 49 ++++++++++++++++++++++++++++++++++++++--- tests/conftest.py | 5 ++++- 2 files changed, 50 insertions(+), 4 deletions(-) diff --git a/supervisor/api/store.py b/supervisor/api/store.py index e0d536c13..ca9d1c970 100644 --- a/supervisor/api/store.py +++ b/supervisor/api/store.py @@ -6,20 +6,37 @@ from aiohttp import web import voluptuous as vol from ..addons import AnyAddon +from ..addons.utils import rating_security +from ..api.const import ATTR_SIGNED from ..api.utils import api_process, api_validate from ..const import ( ATTR_ADDONS, ATTR_ADVANCED, + ATTR_APPARMOR, + ATTR_ARCH, + ATTR_AUTH_API, ATTR_AVAILABLE, ATTR_BACKUP, ATTR_BUILD, ATTR_DESCRIPTON, + ATTR_DETACHED, + ATTR_DOCKER_API, + ATTR_DOCUMENTATION, + ATTR_FULL_ACCESS, + ATTR_HASSIO_API, + ATTR_HASSIO_ROLE, ATTR_HOMEASSISTANT, + ATTR_HOMEASSISTANT_API, + ATTR_HOST_NETWORK, + ATTR_HOST_PID, ATTR_ICON, + ATTR_INGRESS, ATTR_INSTALLED, ATTR_LOGO, + ATTR_LONG_DESCRIPTION, ATTR_MAINTAINER, ATTR_NAME, + ATTR_RATING, ATTR_REPOSITORIES, ATTR_REPOSITORY, ATTR_SLUG, @@ -80,13 +97,18 @@ class APIStore(CoreSysAttributes): return repository - def _generate_addon_information(self, addon: AddonStore) -> dict[str, Any]: + def _generate_addon_information( + self, addon: AddonStore, extended: bool = False + ) -> dict[str, Any]: """Generate addon information.""" - return { + + data = { ATTR_ADVANCED: addon.advanced, + ATTR_ARCH: addon.supported_arch, ATTR_AVAILABLE: addon.available, ATTR_BUILD: addon.need_build, ATTR_DESCRIPTON: addon.description, + ATTR_DOCUMENTATION: addon.with_documentation, ATTR_HOMEASSISTANT: addon.homeassistant_version, ATTR_ICON: addon.with_icon, ATTR_INSTALLED: addon.is_installed, @@ -100,6 +122,27 @@ class APIStore(CoreSysAttributes): ATTR_VERSION_LATEST: addon.latest_version, ATTR_VERSION: addon.version if addon.is_installed else None, } + if extended: + data.update( + { + ATTR_APPARMOR: addon.apparmor, + ATTR_AUTH_API: addon.access_auth_api, + ATTR_DETACHED: addon.is_detached, + ATTR_DOCKER_API: addon.access_docker_api, + ATTR_FULL_ACCESS: addon.with_full_access, + ATTR_HASSIO_API: addon.access_hassio_api, + ATTR_HASSIO_ROLE: addon.hassio_role, + ATTR_HOMEASSISTANT_API: addon.access_homeassistant_api, + ATTR_HOST_NETWORK: addon.host_network, + ATTR_HOST_PID: addon.host_pid, + ATTR_INGRESS: addon.with_ingress, + ATTR_LONG_DESCRIPTION: addon.long_description, + ATTR_RATING: rating_security(addon), + ATTR_SIGNED: addon.signed, + } + ) + + return data def _generate_repository_information( self, repository: Repository @@ -161,7 +204,7 @@ class APIStore(CoreSysAttributes): async def addons_addon_info(self, request: web.Request) -> dict[str, Any]: """Return add-on information.""" addon: AddonStore = self._extract_addon(request) - return self._generate_addon_information(addon) + return self._generate_addon_information(addon, True) @api_process async def repositories_list(self, request: web.Request) -> list[dict[str, Any]]: diff --git a/tests/conftest.py b/tests/conftest.py index 529ca483d..3de87a543 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -14,6 +14,7 @@ import pytest from supervisor import config as su_config from supervisor.addons.addon import Addon +from supervisor.addons.validate import SCHEMA_ADDON_SYSTEM from supervisor.api import RestAPI from supervisor.bootstrap import initialize_coresys from supervisor.const import ATTR_ADDONS_CUSTOM_LIST, ATTR_REPOSITORIES, REQUEST_FROM @@ -309,7 +310,9 @@ def store_addon(coresys: CoreSys, tmp_path, repository): addon_obj = AddonStore(coresys, "test_store_addon") coresys.addons.store[addon_obj.slug] = addon_obj - coresys.store.data.addons[addon_obj.slug] = load_json_fixture("add-on.json") + coresys.store.data.addons[addon_obj.slug] = SCHEMA_ADDON_SYSTEM( + load_json_fixture("add-on.json") + ) yield addon_obj