mirror of
https://github.com/home-assistant/core.git
synced 2025-07-09 14:27:07 +00:00
Resolve addon repository slug for device registry (#51287)
* Resolve addon repository slug for device registry * typo * Adjust onboarding test * Use /store
This commit is contained in:
parent
3d119fd4ab
commit
8ed8747225
@ -71,6 +71,7 @@ CONFIG_SCHEMA = vol.Schema(
|
|||||||
|
|
||||||
DATA_CORE_INFO = "hassio_core_info"
|
DATA_CORE_INFO = "hassio_core_info"
|
||||||
DATA_HOST_INFO = "hassio_host_info"
|
DATA_HOST_INFO = "hassio_host_info"
|
||||||
|
DATA_STORE = "hassio_store"
|
||||||
DATA_INFO = "hassio_info"
|
DATA_INFO = "hassio_info"
|
||||||
DATA_OS_INFO = "hassio_os_info"
|
DATA_OS_INFO = "hassio_os_info"
|
||||||
DATA_SUPERVISOR_INFO = "hassio_supervisor_info"
|
DATA_SUPERVISOR_INFO = "hassio_supervisor_info"
|
||||||
@ -291,6 +292,16 @@ def get_host_info(hass):
|
|||||||
return hass.data.get(DATA_HOST_INFO)
|
return hass.data.get(DATA_HOST_INFO)
|
||||||
|
|
||||||
|
|
||||||
|
@callback
|
||||||
|
@bind_hass
|
||||||
|
def get_store(hass):
|
||||||
|
"""Return store information.
|
||||||
|
|
||||||
|
Async friendly.
|
||||||
|
"""
|
||||||
|
return hass.data.get(DATA_STORE)
|
||||||
|
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
@bind_hass
|
@bind_hass
|
||||||
def get_supervisor_info(hass):
|
def get_supervisor_info(hass):
|
||||||
@ -456,6 +467,7 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: # noqa:
|
|||||||
try:
|
try:
|
||||||
hass.data[DATA_INFO] = await hassio.get_info()
|
hass.data[DATA_INFO] = await hassio.get_info()
|
||||||
hass.data[DATA_HOST_INFO] = await hassio.get_host_info()
|
hass.data[DATA_HOST_INFO] = await hassio.get_host_info()
|
||||||
|
hass.data[DATA_STORE] = await hassio.get_store()
|
||||||
hass.data[DATA_CORE_INFO] = await hassio.get_core_info()
|
hass.data[DATA_CORE_INFO] = await hassio.get_core_info()
|
||||||
hass.data[DATA_SUPERVISOR_INFO] = await hassio.get_supervisor_info()
|
hass.data[DATA_SUPERVISOR_INFO] = await hassio.get_supervisor_info()
|
||||||
hass.data[DATA_OS_INFO] = await hassio.get_os_info()
|
hass.data[DATA_OS_INFO] = await hassio.get_os_info()
|
||||||
@ -627,10 +639,22 @@ class HassioDataUpdateCoordinator(DataUpdateCoordinator):
|
|||||||
async def _async_update_data(self) -> dict[str, Any]:
|
async def _async_update_data(self) -> dict[str, Any]:
|
||||||
"""Update data via library."""
|
"""Update data via library."""
|
||||||
new_data = {}
|
new_data = {}
|
||||||
addon_data = get_supervisor_info(self.hass)
|
supervisor_info = get_supervisor_info(self.hass)
|
||||||
|
store_data = get_store(self.hass)
|
||||||
|
|
||||||
|
repositories = {
|
||||||
|
repo[ATTR_SLUG]: repo[ATTR_NAME]
|
||||||
|
for repo in store_data.get("repositories", [])
|
||||||
|
}
|
||||||
|
|
||||||
new_data["addons"] = {
|
new_data["addons"] = {
|
||||||
addon[ATTR_SLUG]: addon for addon in addon_data.get("addons", [])
|
addon[ATTR_SLUG]: {
|
||||||
|
**addon,
|
||||||
|
ATTR_REPOSITORY: repositories.get(
|
||||||
|
addon.get(ATTR_REPOSITORY), addon.get(ATTR_REPOSITORY, "")
|
||||||
|
),
|
||||||
|
}
|
||||||
|
for addon in supervisor_info.get("addons", [])
|
||||||
}
|
}
|
||||||
if self.is_hass_os:
|
if self.is_hass_os:
|
||||||
new_data["os"] = get_os_info(self.hass)
|
new_data["os"] = get_os_info(self.hass)
|
||||||
|
@ -118,6 +118,14 @@ class HassIO:
|
|||||||
"""
|
"""
|
||||||
return self.send_command(f"/addons/{addon}/info", method="get")
|
return self.send_command(f"/addons/{addon}/info", method="get")
|
||||||
|
|
||||||
|
@api_data
|
||||||
|
def get_store(self):
|
||||||
|
"""Return data from the store.
|
||||||
|
|
||||||
|
This method return a coroutine.
|
||||||
|
"""
|
||||||
|
return self.send_command("/store", method="get")
|
||||||
|
|
||||||
@api_data
|
@api_data
|
||||||
def get_ingress_panels(self):
|
def get_ingress_panels(self):
|
||||||
"""Return data for Add-on ingress panels.
|
"""Return data for Add-on ingress panels.
|
||||||
|
@ -32,6 +32,13 @@ def mock_all(aioclient_mock, request):
|
|||||||
"data": {"supervisor": "222", "homeassistant": "0.110.0", "hassos": None},
|
"data": {"supervisor": "222", "homeassistant": "0.110.0", "hassos": None},
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
aioclient_mock.get(
|
||||||
|
"http://127.0.0.1/store",
|
||||||
|
json={
|
||||||
|
"result": "ok",
|
||||||
|
"data": {"addons": [], "repositories": []},
|
||||||
|
},
|
||||||
|
)
|
||||||
aioclient_mock.get(
|
aioclient_mock.get(
|
||||||
"http://127.0.0.1/host/info",
|
"http://127.0.0.1/host/info",
|
||||||
json={
|
json={
|
||||||
@ -67,6 +74,7 @@ def mock_all(aioclient_mock, request):
|
|||||||
"update_available": False,
|
"update_available": False,
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"version_latest": "1.0.0",
|
"version_latest": "1.0.0",
|
||||||
|
"repository": "core",
|
||||||
"url": "https://github.com/home-assistant/addons/test",
|
"url": "https://github.com/home-assistant/addons/test",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -76,6 +84,7 @@ def mock_all(aioclient_mock, request):
|
|||||||
"update_available": False,
|
"update_available": False,
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"version_latest": "1.0.0",
|
"version_latest": "1.0.0",
|
||||||
|
"repository": "core",
|
||||||
"url": "https://github.com",
|
"url": "https://github.com",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
@ -92,7 +101,7 @@ async def test_setup_api_ping(hass, aioclient_mock):
|
|||||||
result = await async_setup_component(hass, "hassio", {})
|
result = await async_setup_component(hass, "hassio", {})
|
||||||
assert result
|
assert result
|
||||||
|
|
||||||
assert aioclient_mock.call_count == 9
|
assert aioclient_mock.call_count == 10
|
||||||
assert hass.components.hassio.get_core_info()["version_latest"] == "1.0.0"
|
assert hass.components.hassio.get_core_info()["version_latest"] == "1.0.0"
|
||||||
assert hass.components.hassio.is_hassio()
|
assert hass.components.hassio.is_hassio()
|
||||||
|
|
||||||
@ -131,7 +140,7 @@ async def test_setup_api_push_api_data(hass, aioclient_mock):
|
|||||||
)
|
)
|
||||||
assert result
|
assert result
|
||||||
|
|
||||||
assert aioclient_mock.call_count == 9
|
assert aioclient_mock.call_count == 10
|
||||||
assert not aioclient_mock.mock_calls[1][2]["ssl"]
|
assert not aioclient_mock.mock_calls[1][2]["ssl"]
|
||||||
assert aioclient_mock.mock_calls[1][2]["port"] == 9999
|
assert aioclient_mock.mock_calls[1][2]["port"] == 9999
|
||||||
assert aioclient_mock.mock_calls[1][2]["watchdog"]
|
assert aioclient_mock.mock_calls[1][2]["watchdog"]
|
||||||
@ -147,7 +156,7 @@ async def test_setup_api_push_api_data_server_host(hass, aioclient_mock):
|
|||||||
)
|
)
|
||||||
assert result
|
assert result
|
||||||
|
|
||||||
assert aioclient_mock.call_count == 9
|
assert aioclient_mock.call_count == 10
|
||||||
assert not aioclient_mock.mock_calls[1][2]["ssl"]
|
assert not aioclient_mock.mock_calls[1][2]["ssl"]
|
||||||
assert aioclient_mock.mock_calls[1][2]["port"] == 9999
|
assert aioclient_mock.mock_calls[1][2]["port"] == 9999
|
||||||
assert not aioclient_mock.mock_calls[1][2]["watchdog"]
|
assert not aioclient_mock.mock_calls[1][2]["watchdog"]
|
||||||
@ -159,7 +168,7 @@ async def test_setup_api_push_api_data_default(hass, aioclient_mock, hass_storag
|
|||||||
result = await async_setup_component(hass, "hassio", {"http": {}, "hassio": {}})
|
result = await async_setup_component(hass, "hassio", {"http": {}, "hassio": {}})
|
||||||
assert result
|
assert result
|
||||||
|
|
||||||
assert aioclient_mock.call_count == 9
|
assert aioclient_mock.call_count == 10
|
||||||
assert not aioclient_mock.mock_calls[1][2]["ssl"]
|
assert not aioclient_mock.mock_calls[1][2]["ssl"]
|
||||||
assert aioclient_mock.mock_calls[1][2]["port"] == 8123
|
assert aioclient_mock.mock_calls[1][2]["port"] == 8123
|
||||||
refresh_token = aioclient_mock.mock_calls[1][2]["refresh_token"]
|
refresh_token = aioclient_mock.mock_calls[1][2]["refresh_token"]
|
||||||
@ -206,7 +215,7 @@ async def test_setup_api_existing_hassio_user(hass, aioclient_mock, hass_storage
|
|||||||
result = await async_setup_component(hass, "hassio", {"http": {}, "hassio": {}})
|
result = await async_setup_component(hass, "hassio", {"http": {}, "hassio": {}})
|
||||||
assert result
|
assert result
|
||||||
|
|
||||||
assert aioclient_mock.call_count == 9
|
assert aioclient_mock.call_count == 10
|
||||||
assert not aioclient_mock.mock_calls[1][2]["ssl"]
|
assert not aioclient_mock.mock_calls[1][2]["ssl"]
|
||||||
assert aioclient_mock.mock_calls[1][2]["port"] == 8123
|
assert aioclient_mock.mock_calls[1][2]["port"] == 8123
|
||||||
assert aioclient_mock.mock_calls[1][2]["refresh_token"] == token.token
|
assert aioclient_mock.mock_calls[1][2]["refresh_token"] == token.token
|
||||||
@ -220,7 +229,7 @@ async def test_setup_core_push_timezone(hass, aioclient_mock):
|
|||||||
result = await async_setup_component(hass, "hassio", {"hassio": {}})
|
result = await async_setup_component(hass, "hassio", {"hassio": {}})
|
||||||
assert result
|
assert result
|
||||||
|
|
||||||
assert aioclient_mock.call_count == 9
|
assert aioclient_mock.call_count == 10
|
||||||
assert aioclient_mock.mock_calls[2][2]["timezone"] == "testzone"
|
assert aioclient_mock.mock_calls[2][2]["timezone"] == "testzone"
|
||||||
|
|
||||||
with patch("homeassistant.util.dt.set_default_time_zone"):
|
with patch("homeassistant.util.dt.set_default_time_zone"):
|
||||||
@ -237,7 +246,7 @@ async def test_setup_hassio_no_additional_data(hass, aioclient_mock):
|
|||||||
result = await async_setup_component(hass, "hassio", {"hassio": {}})
|
result = await async_setup_component(hass, "hassio", {"hassio": {}})
|
||||||
assert result
|
assert result
|
||||||
|
|
||||||
assert aioclient_mock.call_count == 9
|
assert aioclient_mock.call_count == 10
|
||||||
assert aioclient_mock.mock_calls[-1][3]["X-Hassio-Key"] == "123456"
|
assert aioclient_mock.mock_calls[-1][3]["X-Hassio-Key"] == "123456"
|
||||||
|
|
||||||
|
|
||||||
|
@ -73,6 +73,9 @@ async def mock_supervisor_fixture(hass, aioclient_mock):
|
|||||||
), patch(
|
), patch(
|
||||||
"homeassistant.components.hassio.HassIO.get_host_info",
|
"homeassistant.components.hassio.HassIO.get_host_info",
|
||||||
return_value={},
|
return_value={},
|
||||||
|
), patch(
|
||||||
|
"homeassistant.components.hassio.HassIO.get_store",
|
||||||
|
return_value={},
|
||||||
), patch(
|
), patch(
|
||||||
"homeassistant.components.hassio.HassIO.get_supervisor_info",
|
"homeassistant.components.hassio.HassIO.get_supervisor_info",
|
||||||
return_value={"diagnostics": True},
|
return_value={"diagnostics": True},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user