diff --git a/homeassistant/components/config/config_entries.py b/homeassistant/components/config/config_entries.py index e007f967438..f1daa4586cc 100644 --- a/homeassistant/components/config/config_entries.py +++ b/homeassistant/components/config/config_entries.py @@ -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, } diff --git a/homeassistant/config_entries.py b/homeassistant/config_entries.py index c6979e68b90..8e3c0c7be73 100644 --- a/homeassistant/config_entries.py +++ b/homeassistant/config_entries.py @@ -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, ), diff --git a/tests/components/config/test_config_entries.py b/tests/components/config/test_config_entries.py index 06e19990c62..7b709b05a30 100644 --- a/tests/components/config/test_config_entries.py +++ b/tests/components/config/test_config_entries.py @@ -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", ) ], ) diff --git a/tests/components/kitchen_sink/test_config_flow.py b/tests/components/kitchen_sink/test_config_flow.py index 3b52ea82bcb..a6f07fc3fdc 100644 --- a/tests/components/kitchen_sink/test_config_flow.py +++ b/tests/components/kitchen_sink/test_config_flow.py @@ -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, ) diff --git a/tests/helpers/test_device_registry.py b/tests/helpers/test_device_registry.py index a589c2ad373..846aa00944f 100644 --- a/tests/helpers/test_device_registry.py +++ b/tests/helpers/test_device_registry.py @@ -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", ), diff --git a/tests/helpers/test_entity_platform.py b/tests/helpers/test_entity_platform.py index da59d21f170..4ca817d5962 100644 --- a/tests/helpers/test_entity_platform.py +++ b/tests/helpers/test_entity_platform.py @@ -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", ), diff --git a/tests/helpers/test_entity_registry.py b/tests/helpers/test_entity_registry.py index 6634fdf94d5..0cdec94731f 100644 --- a/tests/helpers/test_entity_registry.py +++ b/tests/helpers/test_entity_registry.py @@ -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", ) diff --git a/tests/test_config_entries.py b/tests/test_config_entries.py index e5a0b13d03d..a33135de7b8 100644 --- a/tests/test_config_entries.py +++ b/tests/test_config_entries.py @@ -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, )