diff --git a/homeassistant/components/vacuum/__init__.py b/homeassistant/components/vacuum/__init__.py index 069371c9b17..b74ccb5fc7a 100644 --- a/homeassistant/components/vacuum/__init__.py +++ b/homeassistant/components/vacuum/__init__.py @@ -23,6 +23,12 @@ from homeassistant.const import ( # noqa: F401 # STATE_PAUSED/IDLE are API ) from homeassistant.core import HomeAssistant from homeassistant.helpers import config_validation as cv +from homeassistant.helpers.deprecation import ( + DeprecatedConstantEnum, + all_with_deprecated_constants, + check_if_deprecated_constant, + dir_with_deprecated_constants, +) from homeassistant.helpers.entity import Entity, EntityDescription from homeassistant.helpers.entity_component import EntityComponent from homeassistant.helpers.icon import icon_for_battery_level @@ -84,20 +90,38 @@ class VacuumEntityFeature(IntFlag): # These SUPPORT_* constants are deprecated as of Home Assistant 2022.5. # Please use the VacuumEntityFeature enum instead. -SUPPORT_TURN_ON = 1 -SUPPORT_TURN_OFF = 2 -SUPPORT_PAUSE = 4 -SUPPORT_STOP = 8 -SUPPORT_RETURN_HOME = 16 -SUPPORT_FAN_SPEED = 32 -SUPPORT_BATTERY = 64 -SUPPORT_STATUS = 128 -SUPPORT_SEND_COMMAND = 256 -SUPPORT_LOCATE = 512 -SUPPORT_CLEAN_SPOT = 1024 -SUPPORT_MAP = 2048 -SUPPORT_STATE = 4096 -SUPPORT_START = 8192 +_DEPRECATED_SUPPORT_TURN_ON = DeprecatedConstantEnum( + VacuumEntityFeature.TURN_ON, "2025.10" +) +_DEPRECATED_SUPPORT_TURN_OFF = DeprecatedConstantEnum( + VacuumEntityFeature.TURN_OFF, "2025.10" +) +_DEPRECATED_SUPPORT_PAUSE = DeprecatedConstantEnum(VacuumEntityFeature.PAUSE, "2025.10") +_DEPRECATED_SUPPORT_STOP = DeprecatedConstantEnum(VacuumEntityFeature.STOP, "2025.10") +_DEPRECATED_SUPPORT_RETURN_HOME = DeprecatedConstantEnum( + VacuumEntityFeature.RETURN_HOME, "2025.10" +) +_DEPRECATED_SUPPORT_FAN_SPEED = DeprecatedConstantEnum( + VacuumEntityFeature.FAN_SPEED, "2025.10" +) +_DEPRECATED_SUPPORT_BATTERY = DeprecatedConstantEnum( + VacuumEntityFeature.BATTERY, "2025.10" +) +_DEPRECATED_SUPPORT_STATUS = DeprecatedConstantEnum( + VacuumEntityFeature.STATUS, "2025.10" +) +_DEPRECATED_SUPPORT_SEND_COMMAND = DeprecatedConstantEnum( + VacuumEntityFeature.SEND_COMMAND, "2025.10" +) +_DEPRECATED_SUPPORT_LOCATE = DeprecatedConstantEnum( + VacuumEntityFeature.LOCATE, "2025.10" +) +_DEPRECATED_SUPPORT_CLEAN_SPOT = DeprecatedConstantEnum( + VacuumEntityFeature.CLEAN_SPOT, "2025.10" +) +_DEPRECATED_SUPPORT_MAP = DeprecatedConstantEnum(VacuumEntityFeature.MAP, "2025.10") +_DEPRECATED_SUPPORT_STATE = DeprecatedConstantEnum(VacuumEntityFeature.STATE, "2025.10") +_DEPRECATED_SUPPORT_START = DeprecatedConstantEnum(VacuumEntityFeature.START, "2025.10") # mypy: disallow-any-generics @@ -381,3 +405,13 @@ class StateVacuumEntity( This method must be run in the event loop. """ await self.hass.async_add_executor_job(self.pause) + + +# As we import deprecated constants from the const module, we need to add these two functions +# otherwise this module will be logged for using deprecated constants and not the custom component +# These can be removed if no deprecated constant are in this module anymore +__getattr__ = partial(check_if_deprecated_constant, module_globals=globals()) +__dir__ = partial( + dir_with_deprecated_constants, module_globals_keys=[*globals().keys()] +) +__all__ = all_with_deprecated_constants(globals()) diff --git a/tests/components/vacuum/test_init.py b/tests/components/vacuum/test_init.py index efd2a63f0f7..d03f1d28b58 100644 --- a/tests/components/vacuum/test_init.py +++ b/tests/components/vacuum/test_init.py @@ -2,10 +2,13 @@ from __future__ import annotations +from enum import Enum +from types import ModuleType from typing import Any import pytest +from homeassistant.components import vacuum from homeassistant.components.vacuum import ( DOMAIN, SERVICE_CLEAN_SPOT, @@ -30,11 +33,45 @@ from . import MockVacuum, help_async_setup_entry_init, help_async_unload_entry from tests.common import ( MockConfigEntry, MockModule, + help_test_all, + import_and_test_deprecated_constant_enum, mock_integration, setup_test_component_platform, ) +def _create_tuples(enum: type[Enum], constant_prefix: str) -> list[tuple[Enum, str]]: + return [(enum_field, constant_prefix) for enum_field in enum if enum_field] + + +@pytest.mark.parametrize( + "module", + [vacuum], +) +def test_all(module: ModuleType) -> None: + """Test module.__all__ is correctly set.""" + help_test_all(module) + + +@pytest.mark.parametrize( + ("enum", "constant_prefix"), _create_tuples(vacuum.VacuumEntityFeature, "SUPPORT_") +) +@pytest.mark.parametrize( + "module", + [vacuum], +) +def test_deprecated_constants( + caplog: pytest.LogCaptureFixture, + enum: Enum, + constant_prefix: str, + module: ModuleType, +) -> None: + """Test deprecated constants.""" + import_and_test_deprecated_constant_enum( + caplog, module, enum, constant_prefix, "2025.10" + ) + + @pytest.mark.parametrize( ("service", "expected_state"), [