End deprecation setting disabled_by as string (#125646)

This commit is contained in:
epenet 2024-09-10 20:39:51 +02:00 committed by GitHub
parent 15e5851383
commit 3536ba43f5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 25 additions and 39 deletions

View File

@ -271,6 +271,16 @@ class ConfigFlowResult(FlowResult, total=False):
version: int version: int
def _validate_item(*, disabled_by: ConfigEntryDisabler | Any | None = None) -> None:
"""Validate config entry item."""
# Deprecated in 2022.1, stopped working in 2024.10
if disabled_by is not None and not isinstance(disabled_by, ConfigEntryDisabler):
raise TypeError(
f"disabled_by must be a ConfigEntryDisabler value, got {disabled_by}"
)
class ConfigEntry(Generic[_DataT]): class ConfigEntry(Generic[_DataT]):
"""Hold a configuration entry.""" """Hold a configuration entry."""
@ -369,18 +379,7 @@ class ConfigEntry(Generic[_DataT]):
_setter(self, "unique_id", unique_id) _setter(self, "unique_id", unique_id)
# Config entry is disabled # Config entry is disabled
if isinstance(disabled_by, str) and not isinstance( _validate_item(disabled_by=disabled_by)
disabled_by, ConfigEntryDisabler
):
report( # type: ignore[unreachable]
(
"uses str for config entry disabled_by. This is deprecated and will"
" stop working in Home Assistant 2022.3, it should be updated to"
" use ConfigEntryDisabler instead"
),
error_if_core=False,
)
disabled_by = ConfigEntryDisabler(disabled_by)
_setter(self, "disabled_by", disabled_by) _setter(self, "disabled_by", disabled_by)
# Supports unload # Supports unload
@ -1958,19 +1957,7 @@ class ConfigEntries:
if (entry := self.async_get_entry(entry_id)) is None: if (entry := self.async_get_entry(entry_id)) is None:
raise UnknownEntry raise UnknownEntry
if isinstance(disabled_by, str) and not isinstance( _validate_item(disabled_by=disabled_by)
disabled_by, ConfigEntryDisabler
):
report( # type: ignore[unreachable]
(
"uses str for config entry disabled_by. This is deprecated and will"
" stop working in Home Assistant 2022.3, it should be updated to"
" use ConfigEntryDisabler instead"
),
error_if_core=False,
)
disabled_by = ConfigEntryDisabler(disabled_by)
if entry.disabled_by is disabled_by: if entry.disabled_by is disabled_by:
return True return True

View File

@ -19,7 +19,7 @@ from homeassistant.components.analytics.const import (
ATTR_STATISTICS, ATTR_STATISTICS,
ATTR_USAGE, ATTR_USAGE,
) )
from homeassistant.config_entries import ConfigEntryState from homeassistant.config_entries import ConfigEntryDisabler, ConfigEntryState
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.exceptions import HomeAssistantError from homeassistant.exceptions import HomeAssistantError
from homeassistant.loader import IntegrationNotFound from homeassistant.loader import IntegrationNotFound
@ -863,7 +863,7 @@ async def test_not_check_config_entries_if_yaml(
domain="ignored_integration", domain="ignored_integration",
state=ConfigEntryState.LOADED, state=ConfigEntryState.LOADED,
source="ignore", source="ignore",
disabled_by="user", disabled_by=ConfigEntryDisabler.USER,
) )
mock_config_entry.add_to_hass(hass) mock_config_entry.add_to_hass(hass)

View File

@ -4297,29 +4297,28 @@ async def test_loading_old_data(
assert entry.pref_disable_new_entities is True assert entry.pref_disable_new_entities is True
async def test_deprecated_disabled_by_str_ctor( async def test_deprecated_disabled_by_str_ctor() -> None:
hass: HomeAssistant, caplog: pytest.LogCaptureFixture
) -> None:
"""Test deprecated str disabled_by constructor enumizes and logs a warning.""" """Test deprecated str disabled_by constructor enumizes and logs a warning."""
entry = MockConfigEntry(disabled_by=config_entries.ConfigEntryDisabler.USER.value) with pytest.raises(
assert entry.disabled_by is config_entries.ConfigEntryDisabler.USER TypeError, match="disabled_by must be a ConfigEntryDisabler value, got user"
assert " str for config entry disabled_by. This is deprecated " in caplog.text ):
MockConfigEntry(disabled_by=config_entries.ConfigEntryDisabler.USER.value)
async def test_deprecated_disabled_by_str_set( async def test_deprecated_disabled_by_str_set(
hass: HomeAssistant, hass: HomeAssistant,
manager: config_entries.ConfigEntries, manager: config_entries.ConfigEntries,
caplog: pytest.LogCaptureFixture,
) -> None: ) -> None:
"""Test deprecated str set disabled_by enumizes and logs a warning.""" """Test deprecated str set disabled_by enumizes and logs a warning."""
entry = MockConfigEntry(domain="comp") entry = MockConfigEntry(domain="comp")
entry.add_to_manager(manager) entry.add_to_manager(manager)
hass.config.components.add("comp") hass.config.components.add("comp")
assert await manager.async_set_disabled_by( with pytest.raises(
TypeError, match="disabled_by must be a ConfigEntryDisabler value, got user"
):
await manager.async_set_disabled_by(
entry.entry_id, config_entries.ConfigEntryDisabler.USER.value entry.entry_id, config_entries.ConfigEntryDisabler.USER.value
) )
assert entry.disabled_by is config_entries.ConfigEntryDisabler.USER
assert " str for config entry disabled_by. This is deprecated " in caplog.text
async def test_entry_reload_concurrency( async def test_entry_reload_concurrency(