mirror of
https://github.com/home-assistant/core.git
synced 2025-04-25 01:38:02 +00:00
Include UUID in hassio discovery data (#91970)
This commit is contained in:
parent
0b0573c387
commit
63f3767a29
@ -29,6 +29,7 @@ class HassioServiceInfo(BaseServiceInfo):
|
||||
config: dict[str, Any]
|
||||
name: str
|
||||
slug: str
|
||||
uuid: str
|
||||
|
||||
|
||||
@callback
|
||||
@ -93,6 +94,7 @@ class HassIODiscovery(HomeAssistantView):
|
||||
service: str = data[ATTR_SERVICE]
|
||||
config_data: dict[str, Any] = data[ATTR_CONFIG]
|
||||
slug: str = data[ATTR_ADDON]
|
||||
uuid: str = data[ATTR_UUID]
|
||||
|
||||
# Read additional Add-on info
|
||||
try:
|
||||
@ -109,7 +111,7 @@ class HassIODiscovery(HomeAssistantView):
|
||||
self.hass,
|
||||
service,
|
||||
context={"source": config_entries.SOURCE_HASSIO},
|
||||
data=HassioServiceInfo(config=config_data, name=name, slug=slug),
|
||||
data=HassioServiceInfo(config=config_data, name=name, slug=slug, uuid=uuid),
|
||||
)
|
||||
|
||||
async def async_process_del(self, data):
|
||||
@ -128,6 +130,6 @@ class HassIODiscovery(HomeAssistantView):
|
||||
|
||||
# Use config flow
|
||||
for entry in self.hass.config_entries.async_entries(service):
|
||||
if entry.source != config_entries.SOURCE_HASSIO:
|
||||
if entry.source != config_entries.SOURCE_HASSIO or entry.unique_id != uuid:
|
||||
continue
|
||||
await self.hass.config_entries.async_remove(entry.entry_id)
|
||||
|
@ -98,6 +98,10 @@ class OTBRConfigFlow(ConfigFlow, domain=DOMAIN):
|
||||
for current_entry in current_entries:
|
||||
if current_entry.source != SOURCE_HASSIO:
|
||||
continue
|
||||
if current_entry.unique_id != discovery_info.uuid:
|
||||
self.hass.config_entries.async_update_entry(
|
||||
current_entry, unique_id=discovery_info.uuid
|
||||
)
|
||||
current_url = yarl.URL(current_entry.data["url"])
|
||||
if (
|
||||
current_url.host != config["host"]
|
||||
@ -116,7 +120,7 @@ class OTBRConfigFlow(ConfigFlow, domain=DOMAIN):
|
||||
_LOGGER.warning("Failed to communicate with OTBR@%s: %s", url, exc)
|
||||
return self.async_abort(reason="unknown")
|
||||
|
||||
await self.async_set_unique_id(DOMAIN)
|
||||
await self.async_set_unique_id(discovery_info.uuid)
|
||||
return self.async_create_entry(
|
||||
title="Open Thread Border Router",
|
||||
data=config_entry_data,
|
||||
|
@ -134,6 +134,7 @@ async def test_hassio_already_configured(hass: HomeAssistant) -> None:
|
||||
},
|
||||
name="AdGuard Home Addon",
|
||||
slug="adguard",
|
||||
uuid="1234",
|
||||
),
|
||||
context={"source": config_entries.SOURCE_HASSIO},
|
||||
)
|
||||
@ -158,6 +159,7 @@ async def test_hassio_ignored(hass: HomeAssistant) -> None:
|
||||
},
|
||||
name="AdGuard Home Addon",
|
||||
slug="adguard",
|
||||
uuid="1234",
|
||||
),
|
||||
context={"source": config_entries.SOURCE_HASSIO},
|
||||
)
|
||||
@ -186,6 +188,7 @@ async def test_hassio_confirm(
|
||||
},
|
||||
name="AdGuard Home Addon",
|
||||
slug="adguard",
|
||||
uuid="1234",
|
||||
),
|
||||
context={"source": config_entries.SOURCE_HASSIO},
|
||||
)
|
||||
@ -228,6 +231,7 @@ async def test_hassio_connection_error(
|
||||
},
|
||||
name="AdGuard Home Addon",
|
||||
slug="adguard",
|
||||
uuid="1234",
|
||||
),
|
||||
context={"source": config_entries.SOURCE_HASSIO},
|
||||
)
|
||||
|
@ -576,6 +576,7 @@ async def test_flow_hassio_discovery(hass: HomeAssistant) -> None:
|
||||
},
|
||||
name="Mock Addon",
|
||||
slug="deconz",
|
||||
uuid="1234",
|
||||
),
|
||||
context={"source": SOURCE_HASSIO},
|
||||
)
|
||||
@ -628,6 +629,7 @@ async def test_hassio_discovery_update_configuration(
|
||||
},
|
||||
name="Mock Addon",
|
||||
slug="deconz",
|
||||
uuid="1234",
|
||||
),
|
||||
context={"source": SOURCE_HASSIO},
|
||||
)
|
||||
@ -658,6 +660,7 @@ async def test_hassio_discovery_dont_update_configuration(
|
||||
},
|
||||
name="Mock Addon",
|
||||
slug="deconz",
|
||||
uuid="1234",
|
||||
),
|
||||
context={"source": SOURCE_HASSIO},
|
||||
)
|
||||
|
@ -813,6 +813,7 @@ async def test_discovery_hassio(hass: HomeAssistant, mock_dashboard) -> None:
|
||||
},
|
||||
name="ESPHome",
|
||||
slug="mock-slug",
|
||||
uuid="1234",
|
||||
),
|
||||
context={"source": config_entries.SOURCE_HASSIO},
|
||||
)
|
||||
|
@ -89,6 +89,7 @@ async def test_hassio_discovery_startup(
|
||||
},
|
||||
name="Mosquitto Test",
|
||||
slug="mosquitto",
|
||||
uuid="test",
|
||||
)
|
||||
)
|
||||
|
||||
@ -153,6 +154,7 @@ async def test_hassio_discovery_startup_done(
|
||||
},
|
||||
name="Mosquitto Test",
|
||||
slug="mosquitto",
|
||||
uuid="test",
|
||||
)
|
||||
)
|
||||
|
||||
@ -207,5 +209,6 @@ async def test_hassio_discovery_webhook(
|
||||
},
|
||||
name="Mosquitto Test",
|
||||
slug="mosquitto",
|
||||
uuid="test",
|
||||
)
|
||||
)
|
||||
|
@ -193,6 +193,7 @@ async def test_supervisor_discovery(
|
||||
config=ADDON_DISCOVERY_INFO,
|
||||
name="Matter Server",
|
||||
slug=ADDON_SLUG,
|
||||
uuid="1234",
|
||||
),
|
||||
)
|
||||
|
||||
@ -232,6 +233,7 @@ async def test_supervisor_discovery_addon_info_failed(
|
||||
config=ADDON_DISCOVERY_INFO,
|
||||
name="Matter Server",
|
||||
slug=ADDON_SLUG,
|
||||
uuid="1234",
|
||||
),
|
||||
)
|
||||
|
||||
@ -262,6 +264,7 @@ async def test_clean_supervisor_discovery_on_user_create(
|
||||
config=ADDON_DISCOVERY_INFO,
|
||||
name="Matter Server",
|
||||
slug=ADDON_SLUG,
|
||||
uuid="1234",
|
||||
),
|
||||
)
|
||||
|
||||
@ -324,6 +327,7 @@ async def test_abort_supervisor_discovery_with_existing_entry(
|
||||
config=ADDON_DISCOVERY_INFO,
|
||||
name="Matter Server",
|
||||
slug=ADDON_SLUG,
|
||||
uuid="1234",
|
||||
),
|
||||
)
|
||||
|
||||
@ -353,6 +357,7 @@ async def test_abort_supervisor_discovery_with_existing_flow(
|
||||
config=ADDON_DISCOVERY_INFO,
|
||||
name="Matter Server",
|
||||
slug=ADDON_SLUG,
|
||||
uuid="1234",
|
||||
),
|
||||
)
|
||||
|
||||
@ -379,6 +384,7 @@ async def test_abort_supervisor_discovery_for_other_addon(
|
||||
},
|
||||
name="Other Matter Server",
|
||||
slug="other_addon",
|
||||
uuid="1234",
|
||||
),
|
||||
)
|
||||
|
||||
@ -404,6 +410,7 @@ async def test_supervisor_discovery_addon_not_running(
|
||||
config=ADDON_DISCOVERY_INFO,
|
||||
name="Matter Server",
|
||||
slug=ADDON_SLUG,
|
||||
uuid="1234",
|
||||
),
|
||||
)
|
||||
|
||||
@ -452,6 +459,7 @@ async def test_supervisor_discovery_addon_not_installed(
|
||||
config=ADDON_DISCOVERY_INFO,
|
||||
name="Matter Server",
|
||||
slug=ADDON_SLUG,
|
||||
uuid="1234",
|
||||
),
|
||||
)
|
||||
|
||||
|
@ -79,6 +79,7 @@ async def test_hassio_success(hass: HomeAssistant) -> None:
|
||||
config={"addon": "motionEye", "url": TEST_URL},
|
||||
name="motionEye",
|
||||
slug="motioneye",
|
||||
uuid="1234",
|
||||
),
|
||||
context={"source": config_entries.SOURCE_HASSIO},
|
||||
)
|
||||
@ -357,6 +358,7 @@ async def test_hassio_already_configured(hass: HomeAssistant) -> None:
|
||||
config={"addon": "motionEye", "url": TEST_URL},
|
||||
name="motionEye",
|
||||
slug="motioneye",
|
||||
uuid="1234",
|
||||
),
|
||||
context={"source": config_entries.SOURCE_HASSIO},
|
||||
)
|
||||
@ -376,6 +378,7 @@ async def test_hassio_ignored(hass: HomeAssistant) -> None:
|
||||
config={"addon": "motionEye", "url": TEST_URL},
|
||||
name="motionEye",
|
||||
slug="motioneye",
|
||||
uuid="1234",
|
||||
),
|
||||
context={"source": config_entries.SOURCE_HASSIO},
|
||||
)
|
||||
@ -396,6 +399,7 @@ async def test_hassio_abort_if_already_in_progress(hass: HomeAssistant) -> None:
|
||||
config={"addon": "motionEye", "url": TEST_URL},
|
||||
name="motionEye",
|
||||
slug="motioneye",
|
||||
uuid="1234",
|
||||
),
|
||||
context={"source": config_entries.SOURCE_HASSIO},
|
||||
)
|
||||
@ -412,6 +416,7 @@ async def test_hassio_clean_up_on_user_flow(hass: HomeAssistant) -> None:
|
||||
config={"addon": "motionEye", "url": TEST_URL},
|
||||
name="motionEye",
|
||||
slug="motioneye",
|
||||
uuid="1234",
|
||||
),
|
||||
context={"source": config_entries.SOURCE_HASSIO},
|
||||
)
|
||||
|
@ -343,6 +343,7 @@ async def test_hassio_ignored(hass: HomeAssistant) -> None:
|
||||
},
|
||||
name="Mosquitto",
|
||||
slug="mosquitto",
|
||||
uuid="1234",
|
||||
),
|
||||
context={"source": config_entries.SOURCE_HASSIO},
|
||||
)
|
||||
@ -373,6 +374,7 @@ async def test_hassio_confirm(
|
||||
},
|
||||
name="Mock Addon",
|
||||
slug="mosquitto",
|
||||
uuid="1234",
|
||||
),
|
||||
context={"source": config_entries.SOURCE_HASSIO},
|
||||
)
|
||||
@ -421,6 +423,7 @@ async def test_hassio_cannot_connect(
|
||||
},
|
||||
name="Mock Addon",
|
||||
slug="mosquitto",
|
||||
uuid="1234",
|
||||
),
|
||||
context={"source": config_entries.SOURCE_HASSIO},
|
||||
)
|
||||
|
@ -21,6 +21,7 @@ HASSIO_DATA = hassio.HassioServiceInfo(
|
||||
config={"host": "core-silabs-multiprotocol", "port": 8081},
|
||||
name="Silicon Labs Multiprotocol",
|
||||
slug="otbr",
|
||||
uuid="12345",
|
||||
)
|
||||
|
||||
|
||||
@ -203,7 +204,7 @@ async def test_hassio_discovery_flow(
|
||||
assert config_entry.data == expected_data
|
||||
assert config_entry.options == {}
|
||||
assert config_entry.title == "Open Thread Border Router"
|
||||
assert config_entry.unique_id == otbr.DOMAIN
|
||||
assert config_entry.unique_id == HASSIO_DATA.uuid
|
||||
|
||||
|
||||
async def test_hassio_discovery_flow_router_not_setup(
|
||||
@ -255,7 +256,7 @@ async def test_hassio_discovery_flow_router_not_setup(
|
||||
assert config_entry.data == expected_data
|
||||
assert config_entry.options == {}
|
||||
assert config_entry.title == "Open Thread Border Router"
|
||||
assert config_entry.unique_id == otbr.DOMAIN
|
||||
assert config_entry.unique_id == HASSIO_DATA.uuid
|
||||
|
||||
|
||||
async def test_hassio_discovery_flow_router_not_setup_has_preferred(
|
||||
@ -304,7 +305,7 @@ async def test_hassio_discovery_flow_router_not_setup_has_preferred(
|
||||
assert config_entry.data == expected_data
|
||||
assert config_entry.options == {}
|
||||
assert config_entry.title == "Open Thread Border Router"
|
||||
assert config_entry.unique_id == otbr.DOMAIN
|
||||
assert config_entry.unique_id == HASSIO_DATA.uuid
|
||||
|
||||
|
||||
async def test_hassio_discovery_flow_router_not_setup_has_preferred_2(
|
||||
@ -366,7 +367,7 @@ async def test_hassio_discovery_flow_router_not_setup_has_preferred_2(
|
||||
assert config_entry.data == expected_data
|
||||
assert config_entry.options == {}
|
||||
assert config_entry.title == "Open Thread Border Router"
|
||||
assert config_entry.unique_id == otbr.DOMAIN
|
||||
assert config_entry.unique_id == HASSIO_DATA.uuid
|
||||
|
||||
|
||||
async def test_hassio_discovery_flow_404(
|
||||
|
@ -123,6 +123,7 @@ async def test_hassio_discovery(hass: HomeAssistant) -> None:
|
||||
},
|
||||
name="RTSPtoWebRTC",
|
||||
slug="rtsp-to-webrtc",
|
||||
uuid="1234",
|
||||
),
|
||||
context={"source": config_entries.SOURCE_HASSIO},
|
||||
)
|
||||
@ -162,6 +163,7 @@ async def test_hassio_single_config_entry(hass: HomeAssistant) -> None:
|
||||
},
|
||||
name="RTSPtoWebRTC",
|
||||
slug="rtsp-to-webrtc",
|
||||
uuid="1234",
|
||||
),
|
||||
context={"source": config_entries.SOURCE_HASSIO},
|
||||
)
|
||||
@ -184,6 +186,7 @@ async def test_hassio_ignored(hass: HomeAssistant) -> None:
|
||||
},
|
||||
name="RTSPtoWebRTC",
|
||||
slug="rtsp-to-webrtc",
|
||||
uuid="1234",
|
||||
),
|
||||
context={"source": config_entries.SOURCE_HASSIO},
|
||||
)
|
||||
@ -203,6 +206,7 @@ async def test_hassio_discovery_server_failure(hass: HomeAssistant) -> None:
|
||||
},
|
||||
name="RTSPtoWebRTC",
|
||||
slug="rtsp-to-webrtc",
|
||||
uuid="1234",
|
||||
),
|
||||
context={"source": config_entries.SOURCE_HASSIO},
|
||||
)
|
||||
|
@ -250,6 +250,7 @@ async def test_hassio_flow(hass: HomeAssistant) -> None:
|
||||
},
|
||||
name="VLC",
|
||||
slug="vlc",
|
||||
uuid="1234",
|
||||
)
|
||||
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
@ -286,7 +287,7 @@ async def test_hassio_already_configured(hass: HomeAssistant) -> None:
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
DOMAIN,
|
||||
context={"source": config_entries.SOURCE_HASSIO},
|
||||
data=HassioServiceInfo(config=entry_data, name="VLC", slug="vlc"),
|
||||
data=HassioServiceInfo(config=entry_data, name="VLC", slug="vlc", uuid="1234"),
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
@ -330,6 +331,7 @@ async def test_hassio_errors(
|
||||
},
|
||||
name="VLC",
|
||||
slug="vlc",
|
||||
uuid="1234",
|
||||
),
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
|
@ -21,6 +21,7 @@ ADDON_DISCOVERY = HassioServiceInfo(
|
||||
},
|
||||
name="Piper",
|
||||
slug="mock_piper",
|
||||
uuid="1234",
|
||||
)
|
||||
|
||||
pytestmark = pytest.mark.usefixtures("mock_setup_entry")
|
||||
|
@ -342,6 +342,7 @@ async def test_supervisor_discovery(
|
||||
config=ADDON_DISCOVERY_INFO,
|
||||
name="Z-Wave JS",
|
||||
slug=ADDON_SLUG,
|
||||
uuid="1234",
|
||||
),
|
||||
)
|
||||
|
||||
@ -386,6 +387,7 @@ async def test_supervisor_discovery_cannot_connect(
|
||||
config=ADDON_DISCOVERY_INFO,
|
||||
name="Z-Wave JS",
|
||||
slug=ADDON_SLUG,
|
||||
uuid="1234",
|
||||
),
|
||||
)
|
||||
|
||||
@ -416,6 +418,7 @@ async def test_clean_discovery_on_user_create(
|
||||
config=ADDON_DISCOVERY_INFO,
|
||||
name="Z-Wave JS",
|
||||
slug=ADDON_SLUG,
|
||||
uuid="1234",
|
||||
),
|
||||
)
|
||||
|
||||
@ -486,6 +489,7 @@ async def test_abort_discovery_with_existing_entry(
|
||||
config=ADDON_DISCOVERY_INFO,
|
||||
name="Z-Wave JS",
|
||||
slug=ADDON_SLUG,
|
||||
uuid="1234",
|
||||
),
|
||||
)
|
||||
|
||||
@ -514,6 +518,7 @@ async def test_abort_hassio_discovery_with_existing_flow(
|
||||
config=ADDON_DISCOVERY_INFO,
|
||||
name="Z-Wave JS",
|
||||
slug=ADDON_SLUG,
|
||||
uuid="1234",
|
||||
),
|
||||
)
|
||||
|
||||
@ -536,6 +541,7 @@ async def test_abort_hassio_discovery_for_other_addon(
|
||||
},
|
||||
name="Other Z-Wave JS",
|
||||
slug="other_addon",
|
||||
uuid="1234",
|
||||
),
|
||||
)
|
||||
|
||||
@ -741,6 +747,7 @@ async def test_discovery_addon_not_running(
|
||||
config=ADDON_DISCOVERY_INFO,
|
||||
name="Z-Wave JS",
|
||||
slug=ADDON_SLUG,
|
||||
uuid="1234",
|
||||
),
|
||||
)
|
||||
|
||||
@ -825,6 +832,7 @@ async def test_discovery_addon_not_installed(
|
||||
config=ADDON_DISCOVERY_INFO,
|
||||
name="Z-Wave JS",
|
||||
slug=ADDON_SLUG,
|
||||
uuid="1234",
|
||||
),
|
||||
)
|
||||
|
||||
@ -912,6 +920,7 @@ async def test_abort_usb_discovery_with_existing_flow(
|
||||
config=ADDON_DISCOVERY_INFO,
|
||||
name="Z-Wave JS",
|
||||
slug=ADDON_SLUG,
|
||||
uuid="1234",
|
||||
),
|
||||
)
|
||||
|
||||
|
@ -2657,7 +2657,7 @@ async def test_async_setup_update_entry(hass: HomeAssistant) -> None:
|
||||
(config_entries.SOURCE_ZEROCONF, BaseServiceInfo()),
|
||||
(
|
||||
config_entries.SOURCE_HASSIO,
|
||||
HassioServiceInfo(config={}, name="Test", slug="test"),
|
||||
HassioServiceInfo(config={}, name="Test", slug="test", uuid="1234"),
|
||||
),
|
||||
),
|
||||
)
|
||||
|
Loading…
x
Reference in New Issue
Block a user