From 23dee4400ab33852e33fd3ddec758e47a6675e61 Mon Sep 17 00:00:00 2001 From: G Johansson Date: Tue, 10 Jun 2025 19:24:47 +0000 Subject: [PATCH] Remove deprecated setting of _config_entry in OptionsFlow --- homeassistant/config_entries.py | 28 +++++--------- tests/test_config_entries.py | 66 --------------------------------- 2 files changed, 9 insertions(+), 85 deletions(-) diff --git a/homeassistant/config_entries.py b/homeassistant/config_entries.py index c2481ae3fa3..9b5fbfac6cc 100644 --- a/homeassistant/config_entries.py +++ b/homeassistant/config_entries.py @@ -3506,9 +3506,6 @@ class OptionsFlow(ConfigEntryBaseFlow): handler: str - _config_entry: ConfigEntry - """For compatibility only - to be removed in 2025.12""" - @callback def _async_abort_entries_match( self, match_dict: dict[str, Any] | None = None @@ -3549,26 +3546,10 @@ class OptionsFlow(ConfigEntryBaseFlow): Please note that this is not available inside `__init__` method, and can only be referenced after initialisation. """ - # For compatibility only - to be removed in 2025.12 - if hasattr(self, "_config_entry"): - return self._config_entry - if self.hass is None: raise ValueError("The config entry is not available during initialisation") return self.hass.config_entries.async_get_known_entry(self._config_entry_id) - @config_entry.setter - def config_entry(self, value: ConfigEntry) -> None: - """Set the config entry value.""" - report_usage( - "sets option flow config_entry explicitly, which is deprecated", - core_behavior=ReportBehavior.ERROR, - core_integration_behavior=ReportBehavior.ERROR, - custom_integration_behavior=ReportBehavior.LOG, - breaks_in_ha_version="2025.12", - ) - self._config_entry = value - class OptionsFlowWithConfigEntry(OptionsFlow): """Base class for options flows with config entry and options. @@ -3588,6 +3569,15 @@ class OptionsFlowWithConfigEntry(OptionsFlow): custom_integration_behavior=ReportBehavior.IGNORE, ) + @property + def config_entry(self) -> ConfigEntry: + """Return the config entry linked to the current options flow. + + Please note that this is not available inside `__init__` method, and + can only be referenced after initialisation. + """ + return self._config_entry + @property def options(self) -> dict[str, Any]: """Return a mutable copy of the config entry options.""" diff --git a/tests/test_config_entries.py b/tests/test_config_entries.py index 55b8434160e..aa2ec534a8e 100644 --- a/tests/test_config_entries.py +++ b/tests/test_config_entries.py @@ -8654,72 +8654,6 @@ async def test_options_flow_config_entry( assert result["reason"] == "abort" -@pytest.mark.parametrize("integration_frame_path", ["custom_components/my_integration"]) -@pytest.mark.usefixtures("mock_integration_frame") -async def test_options_flow_deprecated_config_entry_setter( - hass: HomeAssistant, - manager: config_entries.ConfigEntries, - caplog: pytest.LogCaptureFixture, -) -> None: - """Test that setting config_entry explicitly still works.""" - original_entry = MockConfigEntry(domain="my_integration", data={}) - original_entry.add_to_hass(hass) - - mock_setup_entry = AsyncMock(return_value=True) - - mock_integration( - hass, MockModule("my_integration", async_setup_entry=mock_setup_entry) - ) - mock_platform(hass, "my_integration.config_flow", None) - - class TestFlow(config_entries.ConfigFlow): - """Test flow.""" - - @staticmethod - @callback - def async_get_options_flow(config_entry): - """Test options flow.""" - - class _OptionsFlow(config_entries.OptionsFlow): - """Test flow.""" - - def __init__(self, entry) -> None: - """Test initialisation.""" - self.config_entry = entry - - async def async_step_init(self, user_input=None): - """Test user step.""" - errors = {} - if user_input is not None: - if user_input.get("abort"): - return self.async_abort(reason="abort") - - errors["entry_id"] = self._config_entry_id - try: - errors["entry"] = self.config_entry - except config_entries.UnknownEntry as err: - errors["entry"] = err - - return self.async_show_form(step_id="init", errors=errors) - - return _OptionsFlow(config_entry) - - with mock_config_flow("my_integration", TestFlow): - result = await hass.config_entries.options.async_init(original_entry.entry_id) - - options_flow = hass.config_entries.options._progress.get(result["flow_id"]) - assert options_flow.config_entry is original_entry - - assert ( - "Detected that custom integration 'my_integration' sets option flow " - "config_entry explicitly, which is deprecated at " - "custom_components/my_integration/light.py, line 23: " - "self.light.is_on. This will stop working in Home Assistant 2025.12, please " - "report it to the author of the 'my_integration' custom integration" - in caplog.text - ) - - async def test_add_description_placeholder_automatically( hass: HomeAssistant, manager: config_entries.ConfigEntries,