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
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]):
"""Hold a configuration entry."""
@ -369,18 +379,7 @@ class ConfigEntry(Generic[_DataT]):
_setter(self, "unique_id", unique_id)
# Config entry is disabled
if isinstance(disabled_by, str) and not isinstance(
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)
_validate_item(disabled_by=disabled_by)
_setter(self, "disabled_by", disabled_by)
# Supports unload
@ -1958,19 +1957,7 @@ class ConfigEntries:
if (entry := self.async_get_entry(entry_id)) is None:
raise UnknownEntry
if isinstance(disabled_by, str) and not isinstance(
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)
_validate_item(disabled_by=disabled_by)
if entry.disabled_by is disabled_by:
return True

View File

@ -19,7 +19,7 @@ from homeassistant.components.analytics.const import (
ATTR_STATISTICS,
ATTR_USAGE,
)
from homeassistant.config_entries import ConfigEntryState
from homeassistant.config_entries import ConfigEntryDisabler, ConfigEntryState
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import HomeAssistantError
from homeassistant.loader import IntegrationNotFound
@ -863,7 +863,7 @@ async def test_not_check_config_entries_if_yaml(
domain="ignored_integration",
state=ConfigEntryState.LOADED,
source="ignore",
disabled_by="user",
disabled_by=ConfigEntryDisabler.USER,
)
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
async def test_deprecated_disabled_by_str_ctor(
hass: HomeAssistant, caplog: pytest.LogCaptureFixture
) -> None:
async def test_deprecated_disabled_by_str_ctor() -> None:
"""Test deprecated str disabled_by constructor enumizes and logs a warning."""
entry = MockConfigEntry(disabled_by=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
with pytest.raises(
TypeError, match="disabled_by must be a ConfigEntryDisabler value, got user"
):
MockConfigEntry(disabled_by=config_entries.ConfigEntryDisabler.USER.value)
async def test_deprecated_disabled_by_str_set(
hass: HomeAssistant,
manager: config_entries.ConfigEntries,
caplog: pytest.LogCaptureFixture,
) -> None:
"""Test deprecated str set disabled_by enumizes and logs a warning."""
entry = MockConfigEntry(domain="comp")
entry.add_to_manager(manager)
hass.config.components.add("comp")
assert await manager.async_set_disabled_by(
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
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
)
async def test_entry_reload_concurrency(