Extended store addon info (#3678)

* Add extended store addon info

* Add missing hassio_api

* Fix test
This commit is contained in:
Joakim Sørensen 2022-06-09 13:47:15 +02:00 committed by GitHub
parent 8d1a5c5d6a
commit b82dbc0cac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 50 additions and 4 deletions

View File

@ -6,20 +6,37 @@ from aiohttp import web
import voluptuous as vol import voluptuous as vol
from ..addons import AnyAddon 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 ..api.utils import api_process, api_validate
from ..const import ( from ..const import (
ATTR_ADDONS, ATTR_ADDONS,
ATTR_ADVANCED, ATTR_ADVANCED,
ATTR_APPARMOR,
ATTR_ARCH,
ATTR_AUTH_API,
ATTR_AVAILABLE, ATTR_AVAILABLE,
ATTR_BACKUP, ATTR_BACKUP,
ATTR_BUILD, ATTR_BUILD,
ATTR_DESCRIPTON, ATTR_DESCRIPTON,
ATTR_DETACHED,
ATTR_DOCKER_API,
ATTR_DOCUMENTATION,
ATTR_FULL_ACCESS,
ATTR_HASSIO_API,
ATTR_HASSIO_ROLE,
ATTR_HOMEASSISTANT, ATTR_HOMEASSISTANT,
ATTR_HOMEASSISTANT_API,
ATTR_HOST_NETWORK,
ATTR_HOST_PID,
ATTR_ICON, ATTR_ICON,
ATTR_INGRESS,
ATTR_INSTALLED, ATTR_INSTALLED,
ATTR_LOGO, ATTR_LOGO,
ATTR_LONG_DESCRIPTION,
ATTR_MAINTAINER, ATTR_MAINTAINER,
ATTR_NAME, ATTR_NAME,
ATTR_RATING,
ATTR_REPOSITORIES, ATTR_REPOSITORIES,
ATTR_REPOSITORY, ATTR_REPOSITORY,
ATTR_SLUG, ATTR_SLUG,
@ -80,13 +97,18 @@ class APIStore(CoreSysAttributes):
return repository 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.""" """Generate addon information."""
return {
data = {
ATTR_ADVANCED: addon.advanced, ATTR_ADVANCED: addon.advanced,
ATTR_ARCH: addon.supported_arch,
ATTR_AVAILABLE: addon.available, ATTR_AVAILABLE: addon.available,
ATTR_BUILD: addon.need_build, ATTR_BUILD: addon.need_build,
ATTR_DESCRIPTON: addon.description, ATTR_DESCRIPTON: addon.description,
ATTR_DOCUMENTATION: addon.with_documentation,
ATTR_HOMEASSISTANT: addon.homeassistant_version, ATTR_HOMEASSISTANT: addon.homeassistant_version,
ATTR_ICON: addon.with_icon, ATTR_ICON: addon.with_icon,
ATTR_INSTALLED: addon.is_installed, ATTR_INSTALLED: addon.is_installed,
@ -100,6 +122,27 @@ class APIStore(CoreSysAttributes):
ATTR_VERSION_LATEST: addon.latest_version, ATTR_VERSION_LATEST: addon.latest_version,
ATTR_VERSION: addon.version if addon.is_installed else None, 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( def _generate_repository_information(
self, repository: Repository self, repository: Repository
@ -161,7 +204,7 @@ class APIStore(CoreSysAttributes):
async def addons_addon_info(self, request: web.Request) -> dict[str, Any]: async def addons_addon_info(self, request: web.Request) -> dict[str, Any]:
"""Return add-on information.""" """Return add-on information."""
addon: AddonStore = self._extract_addon(request) addon: AddonStore = self._extract_addon(request)
return self._generate_addon_information(addon) return self._generate_addon_information(addon, True)
@api_process @api_process
async def repositories_list(self, request: web.Request) -> list[dict[str, Any]]: async def repositories_list(self, request: web.Request) -> list[dict[str, Any]]:

View File

@ -14,6 +14,7 @@ import pytest
from supervisor import config as su_config from supervisor import config as su_config
from supervisor.addons.addon import Addon from supervisor.addons.addon import Addon
from supervisor.addons.validate import SCHEMA_ADDON_SYSTEM
from supervisor.api import RestAPI from supervisor.api import RestAPI
from supervisor.bootstrap import initialize_coresys from supervisor.bootstrap import initialize_coresys
from supervisor.const import ATTR_ADDONS_CUSTOM_LIST, ATTR_REPOSITORIES, REQUEST_FROM 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") addon_obj = AddonStore(coresys, "test_store_addon")
coresys.addons.store[addon_obj.slug] = addon_obj 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 yield addon_obj