diff --git a/homeassistant/components/config/config_entries.py b/homeassistant/components/config/config_entries.py index d58616ff38f..13cf9a29e7d 100644 --- a/homeassistant/components/config/config_entries.py +++ b/homeassistant/components/config/config_entries.py @@ -545,19 +545,13 @@ async def async_matching_config_entries( @callback def entry_json(entry: config_entries.ConfigEntry) -> dict: """Return JSON value of a config entry.""" - handler = config_entries.HANDLERS.get(entry.domain) - # work out if handler has support for options flow - supports_options = handler is not None and handler.async_supports_options_flow( - entry - ) - return { "entry_id": entry.entry_id, "domain": entry.domain, "title": entry.title, "source": entry.source, "state": entry.state.value, - "supports_options": supports_options, + "supports_options": entry.supports_options_flow(), "supports_remove_device": entry.supports_remove_device or False, "supports_unload": entry.supports_unload or False, "pref_disable_new_entities": entry.pref_disable_new_entities, diff --git a/homeassistant/components/conversation/__init__.py b/homeassistant/components/conversation/__init__.py index ea1eb041fe5..2c38609a052 100644 --- a/homeassistant/components/conversation/__init__.py +++ b/homeassistant/components/conversation/__init__.py @@ -335,6 +335,7 @@ class AgentInfo: id: str name: str + has_options_flow: bool @core.callback @@ -433,6 +434,7 @@ class AgentManager: AgentInfo( id=HOME_ASSISTANT_AGENT, name="Home Assistant", + has_options_flow=False, ) ] for agent_id, agent in self._agents.items(): @@ -451,6 +453,7 @@ class AgentManager: AgentInfo( id=agent_id, name=config_entry.title or config_entry.domain, + has_options_flow=config_entry.supports_options_flow(), ) ) return agents diff --git a/homeassistant/config_entries.py b/homeassistant/config_entries.py index adbb2f80f64..6a000002ad8 100644 --- a/homeassistant/config_entries.py +++ b/homeassistant/config_entries.py @@ -661,6 +661,12 @@ class ConfigEntry: return lambda: self.update_listeners.remove(weak_listener) + def supports_options_flow(self) -> bool: + """Return if config entry supports options flow.""" + return ( + handler := HANDLERS.get(self.domain) + ) is not None and handler.async_supports_options_flow(self) + def as_dict(self) -> dict[str, Any]: """Return dictionary version of this entry.""" return { diff --git a/tests/components/conversation/snapshots/test_init.ambr b/tests/components/conversation/snapshots/test_init.ambr index 61e499b15da..508e6b35438 100644 --- a/tests/components/conversation/snapshots/test_init.ambr +++ b/tests/components/conversation/snapshots/test_init.ambr @@ -1,24 +1,28 @@ # serializer version: 1 # name: test_get_agent_info dict({ + 'has_options_flow': False, 'id': 'mock-entry', 'name': 'Mock Title', }) # --- # name: test_get_agent_info.1 dict({ + 'has_options_flow': False, 'id': 'homeassistant', 'name': 'Home Assistant', }) # --- # name: test_get_agent_info.2 dict({ + 'has_options_flow': False, 'id': 'mock-entry', 'name': 'Mock Title', }) # --- # name: test_get_agent_info.3 dict({ + 'has_options_flow': False, 'id': 'mock-entry', 'name': 'test', }) diff --git a/tests/test_config_entries.py b/tests/test_config_entries.py index b20f2af7669..769547dd2e4 100644 --- a/tests/test_config_entries.py +++ b/tests/test_config_entries.py @@ -1110,7 +1110,9 @@ async def test_entry_options( entry = MockConfigEntry(domain="test", data={"first": True}, options=None) entry.add_to_manager(manager) - class TestFlow: + assert entry.supports_options_flow() is False + + class TestFlow(config_entries.ConfigFlow): """Test flow.""" @staticmethod @@ -1123,7 +1125,10 @@ async def test_entry_options( return OptionsFlowHandler() - config_entries.HANDLERS["test"] = TestFlow() + config_entries.HANDLERS["test"] = TestFlow + + assert entry.supports_options_flow() is True + flow = await manager.options.async_create_flow( entry.entry_id, context={"source": "test"}, data=None )