Store subentry type in subentry

pull/132049/head
Erik 2025-01-07 11:29:48 +01:00
parent 07734239b4
commit 1fbf929819
8 changed files with 66 additions and 7 deletions

View File

@ -681,6 +681,7 @@ async def config_subentry_list(
result = [
{
"subentry_id": subentry.subentry_id,
"subentry_type": subentry.subentry_type,
"title": subentry.title,
"unique_id": subentry.unique_id,
}

View File

@ -326,6 +326,7 @@ class ConfigSubentryData(TypedDict):
"""
data: Mapping[str, Any]
subentry_type: str
title: str
unique_id: str | None
@ -358,6 +359,7 @@ class ConfigSubentry:
data: MappingProxyType[str, Any]
subentry_id: str = field(default_factory=ulid_util.ulid_now)
subentry_type: str
title: str
unique_id: str | None
@ -366,6 +368,7 @@ class ConfigSubentry:
return {
"data": dict(self.data),
"subentry_id": self.subentry_id,
"subentry_type": self.subentry_type,
"title": self.title,
"unique_id": self.unique_id,
}
@ -462,6 +465,7 @@ class ConfigEntry(Generic[_DataT]):
subentry_kwargs["subentry_id"] = subentry_data["subentry_id"] # type: ignore[typeddict-item]
subentry = ConfigSubentry(
data=MappingProxyType(subentry_data["data"]),
subentry_type=subentry_data["subentry_type"],
title=subentry_data["title"],
unique_id=subentry_data.get("unique_id"),
**subentry_kwargs,
@ -3345,7 +3349,7 @@ class ConfigSubentryFlowManager(
if result["type"] != data_entry_flow.FlowResultType.CREATE_ENTRY:
return result
entry_id = flow.handler[0]
entry_id, subentry_type = flow.handler
entry = self.hass.config_entries.async_get_entry(entry_id)
if entry is None:
raise UnknownEntry(entry_id)
@ -3358,6 +3362,7 @@ class ConfigSubentryFlowManager(
entry,
ConfigSubentry(
data=MappingProxyType(result["data"]),
subentry_type=subentry_type,
title=result["title"],
unique_id=unique_id,
),

View File

@ -1192,7 +1192,11 @@ async def test_subentry_reconfigure_flow(hass: HomeAssistant, client) -> None:
source="bla",
subentries_data=[
core_ce.ConfigSubentryData(
data={}, subentry_id="mock_id", title="Title", unique_id=None
data={},
subentry_id="mock_id",
subentry_type="test",
title="Title",
unique_id=None,
)
],
).add_to_hass(hass)
@ -2874,6 +2878,7 @@ async def test_list_subentries(
core_ce.ConfigSubentryData(
data={"test": "test"},
subentry_id="mock_id",
subentry_type="test",
title="Mock title",
unique_id="test",
)
@ -2894,7 +2899,12 @@ async def test_list_subentries(
assert response["success"]
assert response["result"] == [
{"subentry_id": "mock_id", "title": "Mock title", "unique_id": "test"},
{
"subentry_id": "mock_id",
"subentry_type": "test",
"title": "Mock title",
"unique_id": "test",
},
]
# Try listing subentries for an unknown entry
@ -2925,7 +2935,10 @@ async def test_delete_subentry(
state=core_ce.ConfigEntryState.LOADED,
subentries_data=[
core_ce.ConfigSubentryData(
data={"test": "test"}, subentry_id="mock_id", title="Mock title"
data={"test": "test"},
subentry_id="mock_id",
subentry_type="test",
title="Mock title",
)
],
)

View File

@ -132,6 +132,7 @@ async def test_subentry_flow(hass: HomeAssistant) -> None:
subentry_id: config_entries.ConfigSubentry(
data={"state": 15},
subentry_id=subentry_id,
subentry_type="add_entity",
title="Sensor 1",
unique_id=None,
)
@ -150,6 +151,7 @@ async def test_subentry_reconfigure_flow(hass: HomeAssistant) -> None:
config_entries.ConfigSubentryData(
data={"state": 15},
subentry_id="mock_id",
subentry_type="add_entity",
title="Sensor 1",
unique_id=None,
)
@ -177,6 +179,7 @@ async def test_subentry_reconfigure_flow(hass: HomeAssistant) -> None:
subentry_id: config_entries.ConfigSubentry(
data={"state": 5},
subentry_id=subentry_id,
subentry_type="add_entity",
title="Renamed sensor 1",
unique_id=None,
)

View File

@ -182,6 +182,7 @@ async def test_multiple_config_subentries(
config_entries.ConfigSubentryData(
data={},
subentry_id="mock-subentry-id-1-1",
subentry_type="test",
title="Mock title",
unique_id="test",
),
@ -193,6 +194,7 @@ async def test_multiple_config_subentries(
config_entries.ConfigSubentryData(
data={},
subentry_id="mock-subentry-id-2-1",
subentry_type="test",
title="Mock title",
unique_id="test",
),
@ -1566,6 +1568,7 @@ async def test_removing_config_subentries(
config_entries.ConfigSubentryData(
data={},
subentry_id="mock-subentry-id-1-1",
subentry_type="test",
title="Mock title",
unique_id="test",
),
@ -1577,6 +1580,7 @@ async def test_removing_config_subentries(
config_entries.ConfigSubentryData(
data={},
subentry_id="mock-subentry-id-2-1",
subentry_type="test",
title="Mock title",
unique_id="test",
),
@ -1677,6 +1681,7 @@ async def test_deleted_device_removing_config_subentries(
config_entries.ConfigSubentryData(
data={},
subentry_id="mock-subentry-id-2-1",
subentry_type="test",
title="Mock title",
unique_id="test",
),
@ -2508,6 +2513,7 @@ async def test_update_remove_config_subentries(
config_entries.ConfigSubentryData(
data={},
subentry_id="mock-subentry-id-1-1",
subentry_type="test",
title="Mock title",
unique_id="test",
),
@ -2519,6 +2525,7 @@ async def test_update_remove_config_subentries(
config_entries.ConfigSubentryData(
data={},
subentry_id="mock-subentry-id-2-1",
subentry_type="test",
title="Mock title",
unique_id="test",
),

View File

@ -881,6 +881,7 @@ async def test_setup_entry(
ConfigSubentryData(
data={},
subentry_id="mock-subentry-id-1",
subentry_type="test",
title="Mock title",
unique_id="test",
),
@ -1166,6 +1167,7 @@ async def test_device_info_called(
ConfigSubentryData(
data={},
subentry_id="mock-subentry-id-1",
subentry_type="test",
title="Mock title",
unique_id="test",
),

View File

@ -84,6 +84,7 @@ def test_get_or_create_updates_data(
config_entries.ConfigSubentryData(
data={},
subentry_id=config_subentry_id,
subentry_type="test",
title="Mock title",
unique_id="test",
)
@ -718,6 +719,7 @@ async def test_removing_config_subentry_id(
config_entries.ConfigSubentryData(
data={},
subentry_id="mock-subentry-id-1",
subentry_type="test",
title="Mock title",
unique_id="test",
)
@ -762,12 +764,14 @@ async def test_deleted_entity_removing_config_subentry_id(
config_entries.ConfigSubentryData(
data={},
subentry_id="mock-subentry-id-1",
subentry_type="test",
title="Mock title",
unique_id="test",
),
config_entries.ConfigSubentryData(
data={},
subentry_id="mock-subentry-id-2",
subentry_type="test",
title="Mock title",
unique_id="test",
),
@ -1557,12 +1561,14 @@ async def test_remove_config_subentry_from_device_removes_entities(
config_entries.ConfigSubentryData(
data={},
subentry_id="mock-subentry-id-1",
subentry_type="test",
title="Mock title",
unique_id="test",
),
config_entries.ConfigSubentryData(
data={},
subentry_id="mock-subentry-id-2",
subentry_type="test",
title="Mock title",
unique_id="test",
),
@ -1646,12 +1652,14 @@ async def test_remove_config_subentry_from_device_removes_entities_2(
config_entries.ConfigSubentryData(
data={},
subentry_id="mock-subentry-id-1",
subentry_type="test",
title="Mock title",
unique_id="test",
),
config_entries.ConfigSubentryData(
data={},
subentry_id="mock-subentry-id-2",
subentry_type="test",
title="Mock title",
unique_id="test",
),
@ -2135,6 +2143,7 @@ def test_migrate_entity_to_new_platform(
config_entries.ConfigSubentryData(
data={},
subentry_id="mock-subentry-id-1",
subentry_type="test",
title="Mock title",
unique_id="test",
),
@ -2169,6 +2178,7 @@ def test_migrate_entity_to_new_platform(
config_entries.ConfigSubentryData(
data={},
subentry_id="mock-subentry-id-2",
subentry_type="test",
title="Mock title",
unique_id="test",
),
@ -2234,6 +2244,7 @@ def test_migrate_entity_to_new_platform_error_handling(
config_entries.ConfigSubentryData(
data={},
subentry_id="mock-subentry-id-1",
subentry_type="test",
title="Mock title",
unique_id="test",
),
@ -2263,6 +2274,7 @@ def test_migrate_entity_to_new_platform_error_handling(
config_entries.ConfigSubentryData(
data={},
subentry_id="mock-subentry-id-2",
subentry_type="test",
title="Mock title",
unique_id="test",
),
@ -2327,6 +2339,7 @@ async def test_restore_entity(
config_entries.ConfigSubentryData(
data={},
subentry_id="mock-subentry-id-1-1",
subentry_type="test",
title="Mock title",
unique_id="test",
),
@ -2690,12 +2703,14 @@ async def test_subentry(
config_entries.ConfigSubentryData(
data={},
subentry_id="mock-subentry-id-1-1",
subentry_type="test",
title="Mock title",
unique_id="test",
),
config_entries.ConfigSubentryData(
data={},
subentry_id="mock-subentry-id-1-2",
subentry_type="test",
title="Mock title",
unique_id="test",
),
@ -2709,6 +2724,7 @@ async def test_subentry(
config_entries.ConfigSubentryData(
data={},
subentry_id="mock-subentry-id-2-1",
subentry_type="test",
title="Mock title",
unique_id="test",
)

View File

@ -925,10 +925,13 @@ async def test_saving_and_loading(
await self.async_set_unique_id("unique")
subentries = [
config_entries.ConfigSubentryData(
data={"foo": "bar"}, title="subentry 1"
data={"foo": "bar"}, subentry_type="test", title="subentry 1"
),
config_entries.ConfigSubentryData(
data={"sun": "moon"}, title="subentry 2", unique_id="very_unique"
data={"sun": "moon"},
subentry_type="test",
title="subentry 2",
unique_id="very_unique",
),
]
return self.async_create_entry(
@ -1005,12 +1008,14 @@ async def test_saving_and_loading(
{
"data": {"foo": "bar"},
"subentry_id": ANY,
"subentry_type": "test",
"title": "subentry 1",
"unique_id": None,
},
{
"data": {"sun": "moon"},
"subentry_id": ANY,
"subentry_type": "test",
"title": "subentry 2",
"unique_id": "very_unique",
},
@ -1547,7 +1552,10 @@ async def test_update_subentry_and_trigger_listener(
update_listener_calls = []
subentry = config_entries.ConfigSubentry(
data={"test": "test"}, unique_id="test", title="Mock title"
data={"test": "test"},
subentry_type="test",
unique_id="test",
title="Mock title",
)
async def update_listener(
@ -1914,6 +1922,7 @@ async def test_create_entry_subentries(
subentrydata = config_entries.ConfigSubentryData(
data={"test": "test"},
title="Mock title",
subentry_type="test",
unique_id="test",
)
@ -1966,6 +1975,7 @@ async def test_create_entry_subentries(
subentry = config_entries.ConfigSubentry(
data=subentrydata["data"],
subentry_id=subentry_id,
subentry_type="test",
title=subentrydata["title"],
unique_id="test",
)
@ -2018,6 +2028,7 @@ async def test_entry_subentry(
subentry_id: config_entries.ConfigSubentry(
data={"second": True},
subentry_id=subentry_id,
subentry_type="test",
title="Mock title",
unique_id="test",
)
@ -2117,6 +2128,7 @@ async def test_entry_subentry_duplicate(
config_entries.ConfigSubentryData(
data={},
subentry_id="blabla",
subentry_type="test",
title="Mock title",
unique_id=unique_id,
)