diff --git a/supervisor/api/__init__.py b/supervisor/api/__init__.py index 76e7abeb4..21e948aa0 100644 --- a/supervisor/api/__init__.py +++ b/supervisor/api/__init__.py @@ -6,6 +6,7 @@ from typing import Any, Optional from aiohttp import web from supervisor.api.utils import api_process +from supervisor.const import AddonState from supervisor.exceptions import APIAddonNotInstalled from ..coresys import CoreSys, CoreSysAttributes @@ -413,7 +414,12 @@ class RestAPI(CoreSysAttributes): try: return await api_addons.info(request) except APIAddonNotInstalled: - return await api_store.addons_addon_info(request) + # Route to store/{addon}/info but add missing fields + return dict( + await api_store.addons_addon_info_wrapped(request), + state=AddonState.UNKNOWN, + options=self.sys_addons.store[request.match_info["addon"]].options, + ) self.webapp.add_routes([web.get("/addons/{addon}/info", addons_addon_info)]) diff --git a/supervisor/api/store.py b/supervisor/api/store.py index b2702af63..1263add40 100644 --- a/supervisor/api/store.py +++ b/supervisor/api/store.py @@ -212,6 +212,11 @@ class APIStore(CoreSysAttributes): @api_process async def addons_addon_info(self, request: web.Request) -> dict[str, Any]: """Return add-on information.""" + return await self.addons_addon_info_wrapped(request) + + # Used by legacy routing for addons/{addon}/info, can be refactored out when that is removed (1/2023) + async def addons_addon_info_wrapped(self, request: web.Request) -> dict[str, Any]: + """Return add-on information directly (not api).""" addon: AddonStore = self._extract_addon(request) return self._generate_addon_information(addon, True) diff --git a/tests/api/test_addons.py b/tests/api/test_addons.py index fea8ba208..d3971419e 100644 --- a/tests/api/test_addons.py +++ b/tests/api/test_addons.py @@ -34,3 +34,11 @@ async def test_addons_info_not_installed( result = await resp.json() assert result["data"]["version_latest"] == "9.2.1" assert result["data"]["version"] is None + assert result["data"]["state"] == "unknown" + assert result["data"]["update_available"] is False + assert result["data"]["options"] == { + "authorized_keys": [], + "apks": [], + "password": "", + "server": {"tcp_forwarding": False}, + }