From d3ed80cf532b624020c0e9ab9c2622d1ecc752c4 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Sun, 26 Apr 2020 02:11:08 +0200 Subject: [PATCH] Rename VacuumDevice to VacuumEntity (#34674) --- homeassistant/components/demo/vacuum.py | 8 +++--- homeassistant/components/dyson/vacuum.py | 4 +-- homeassistant/components/ecovacs/vacuum.py | 4 +-- .../components/mqtt/vacuum/schema_legacy.py | 4 +-- .../components/mqtt/vacuum/schema_state.py | 4 +-- homeassistant/components/neato/vacuum.py | 4 +-- .../components/roomba/irobot_base.py | 4 +-- homeassistant/components/template/vacuum.py | 4 +-- homeassistant/components/vacuum/__init__.py | 28 +++++++++++++++++-- .../components/xiaomi_miio/vacuum.py | 4 +-- tests/components/demo/test_vacuum.py | 4 +-- tests/components/vacuum/test_init.py | 18 ++++++++++++ 12 files changed, 66 insertions(+), 24 deletions(-) create mode 100644 tests/components/vacuum/test_init.py diff --git a/homeassistant/components/demo/vacuum.py b/homeassistant/components/demo/vacuum.py index 0bdf3ed48f1..a5d85aa9bd6 100644 --- a/homeassistant/components/demo/vacuum.py +++ b/homeassistant/components/demo/vacuum.py @@ -21,8 +21,8 @@ from homeassistant.components.vacuum import ( SUPPORT_STOP, SUPPORT_TURN_OFF, SUPPORT_TURN_ON, - StateVacuumDevice, - VacuumDevice, + StateVacuumEntity, + VacuumEntity, ) _LOGGER = logging.getLogger(__name__) @@ -95,7 +95,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= ) -class DemoVacuum(VacuumDevice): +class DemoVacuum(VacuumEntity): """Representation of a demo vacuum.""" def __init__(self, name, supported_features): @@ -254,7 +254,7 @@ class DemoVacuum(VacuumDevice): self.schedule_update_ha_state() -class StateDemoVacuum(StateVacuumDevice): +class StateDemoVacuum(StateVacuumEntity): """Representation of a demo vacuum supporting states.""" def __init__(self, name): diff --git a/homeassistant/components/dyson/vacuum.py b/homeassistant/components/dyson/vacuum.py index 6203b65c9db..2306e07072d 100644 --- a/homeassistant/components/dyson/vacuum.py +++ b/homeassistant/components/dyson/vacuum.py @@ -13,7 +13,7 @@ from homeassistant.components.vacuum import ( SUPPORT_STOP, SUPPORT_TURN_OFF, SUPPORT_TURN_ON, - VacuumDevice, + VacuumEntity, ) from homeassistant.helpers.icon import icon_for_battery_level @@ -54,7 +54,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): return True -class Dyson360EyeDevice(VacuumDevice): +class Dyson360EyeDevice(VacuumEntity): """Dyson 360 Eye robot vacuum device.""" def __init__(self, device): diff --git a/homeassistant/components/ecovacs/vacuum.py b/homeassistant/components/ecovacs/vacuum.py index 8b6115970bb..6ad51e6c474 100644 --- a/homeassistant/components/ecovacs/vacuum.py +++ b/homeassistant/components/ecovacs/vacuum.py @@ -14,7 +14,7 @@ from homeassistant.components.vacuum import ( SUPPORT_STOP, SUPPORT_TURN_OFF, SUPPORT_TURN_ON, - VacuumDevice, + VacuumEntity, ) from homeassistant.helpers.icon import icon_for_battery_level @@ -48,7 +48,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): add_entities(vacuums, True) -class EcovacsVacuum(VacuumDevice): +class EcovacsVacuum(VacuumEntity): """Ecovacs Vacuums such as Deebot.""" def __init__(self, device): diff --git a/homeassistant/components/mqtt/vacuum/schema_legacy.py b/homeassistant/components/mqtt/vacuum/schema_legacy.py index 85851bcf696..c4259272bb3 100644 --- a/homeassistant/components/mqtt/vacuum/schema_legacy.py +++ b/homeassistant/components/mqtt/vacuum/schema_legacy.py @@ -25,7 +25,7 @@ from homeassistant.components.vacuum import ( SUPPORT_STOP, SUPPORT_TURN_OFF, SUPPORT_TURN_ON, - VacuumDevice, + VacuumEntity, ) from homeassistant.const import ATTR_SUPPORTED_FEATURES, CONF_DEVICE, CONF_NAME from homeassistant.core import callback @@ -174,7 +174,7 @@ class MqttVacuum( MqttAvailability, MqttDiscoveryUpdate, MqttEntityDeviceInfo, - VacuumDevice, + VacuumEntity, ): """Representation of a MQTT-controlled legacy vacuum.""" diff --git a/homeassistant/components/mqtt/vacuum/schema_state.py b/homeassistant/components/mqtt/vacuum/schema_state.py index a59beae1d34..9049df45110 100644 --- a/homeassistant/components/mqtt/vacuum/schema_state.py +++ b/homeassistant/components/mqtt/vacuum/schema_state.py @@ -34,7 +34,7 @@ from homeassistant.components.vacuum import ( SUPPORT_START, SUPPORT_STATUS, SUPPORT_STOP, - StateVacuumDevice, + StateVacuumEntity, ) from homeassistant.const import ATTR_SUPPORTED_FEATURES, CONF_DEVICE, CONF_NAME from homeassistant.core import callback @@ -162,7 +162,7 @@ class MqttStateVacuum( MqttAvailability, MqttDiscoveryUpdate, MqttEntityDeviceInfo, - StateVacuumDevice, + StateVacuumEntity, ): """Representation of a MQTT-controlled state vacuum.""" diff --git a/homeassistant/components/neato/vacuum.py b/homeassistant/components/neato/vacuum.py index 391fcecf373..a67b48169c4 100644 --- a/homeassistant/components/neato/vacuum.py +++ b/homeassistant/components/neato/vacuum.py @@ -22,7 +22,7 @@ from homeassistant.components.vacuum import ( SUPPORT_START, SUPPORT_STATE, SUPPORT_STOP, - StateVacuumDevice, + StateVacuumEntity, ) from homeassistant.const import ATTR_ENTITY_ID, ATTR_MODE import homeassistant.helpers.config_validation as cv @@ -126,7 +126,7 @@ async def async_setup_entry(hass, entry, async_add_entities): ) -class NeatoConnectedVacuum(StateVacuumDevice): +class NeatoConnectedVacuum(StateVacuumEntity): """Representation of a Neato Connected Vacuum.""" def __init__(self, neato, robot, mapdata, persistent_maps): diff --git a/homeassistant/components/roomba/irobot_base.py b/homeassistant/components/roomba/irobot_base.py index a62ad4fdd96..cb422616e5a 100644 --- a/homeassistant/components/roomba/irobot_base.py +++ b/homeassistant/components/roomba/irobot_base.py @@ -17,7 +17,7 @@ from homeassistant.components.vacuum import ( SUPPORT_START, SUPPORT_STATE, SUPPORT_STOP, - StateVacuumDevice, + StateVacuumEntity, ) from homeassistant.helpers.entity import Entity @@ -104,7 +104,7 @@ class IRobotEntity(Entity): self.schedule_update_ha_state() -class IRobotVacuum(IRobotEntity, StateVacuumDevice): +class IRobotVacuum(IRobotEntity, StateVacuumEntity): """Base class for iRobot robots.""" def __init__(self, roomba, blid): diff --git a/homeassistant/components/template/vacuum.py b/homeassistant/components/template/vacuum.py index 4946d54edc3..c345663ca98 100644 --- a/homeassistant/components/template/vacuum.py +++ b/homeassistant/components/template/vacuum.py @@ -28,7 +28,7 @@ from homeassistant.components.vacuum import ( SUPPORT_START, SUPPORT_STATE, SUPPORT_STOP, - StateVacuumDevice, + StateVacuumEntity, ) from homeassistant.const import ( CONF_ENTITY_ID, @@ -144,7 +144,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= async_add_entities(vacuums) -class TemplateVacuum(StateVacuumDevice): +class TemplateVacuum(StateVacuumEntity): """A template vacuum component.""" def __init__( diff --git a/homeassistant/components/vacuum/__init__.py b/homeassistant/components/vacuum/__init__.py index f66a1b5f226..7ef2e3889a9 100644 --- a/homeassistant/components/vacuum/__init__.py +++ b/homeassistant/components/vacuum/__init__.py @@ -228,7 +228,7 @@ class _BaseVacuum(Entity): ) -class VacuumDevice(_BaseVacuum, ToggleEntity): +class VacuumEntity(_BaseVacuum, ToggleEntity): """Representation of a vacuum cleaner robot.""" @property @@ -309,7 +309,19 @@ class VacuumDevice(_BaseVacuum, ToggleEntity): """Not supported.""" -class StateVacuumDevice(_BaseVacuum): +class VacuumDevice(VacuumEntity): + """Representation of a vacuum (for backwards compatibility).""" + + def __init_subclass__(cls, **kwargs): + """Print deprecation warning.""" + super().__init_subclass__(**kwargs) + _LOGGER.warning( + "VacuumDevice is deprecated, modify %s to extend VacuumEntity", + cls.__name__, + ) + + +class StateVacuumEntity(_BaseVacuum): """Representation of a vacuum cleaner robot that supports states.""" @property @@ -377,3 +389,15 @@ class StateVacuumDevice(_BaseVacuum): async def async_toggle(self, **kwargs): """Not supported.""" + + +class StateVacuumDevice(StateVacuumEntity): + """Representation of a vacuum (for backwards compatibility).""" + + def __init_subclass__(cls, **kwargs): + """Print deprecation warning.""" + super().__init_subclass__(**kwargs) + _LOGGER.warning( + "StateVacuumDevice is deprecated, modify %s to extend StateVacuumEntity", + cls.__name__, + ) diff --git a/homeassistant/components/xiaomi_miio/vacuum.py b/homeassistant/components/xiaomi_miio/vacuum.py index 416918e6f43..fd144e1edc7 100644 --- a/homeassistant/components/xiaomi_miio/vacuum.py +++ b/homeassistant/components/xiaomi_miio/vacuum.py @@ -25,7 +25,7 @@ from homeassistant.components.vacuum import ( SUPPORT_START, SUPPORT_STATE, SUPPORT_STOP, - StateVacuumDevice, + StateVacuumEntity, ) from homeassistant.const import ( ATTR_ENTITY_ID, @@ -229,7 +229,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= ) -class MiroboVacuum(StateVacuumDevice): +class MiroboVacuum(StateVacuumEntity): """Representation of a Xiaomi Vacuum cleaner robot.""" def __init__(self, name, vacuum): diff --git a/tests/components/demo/test_vacuum.py b/tests/components/demo/test_vacuum.py index e64e7d178cd..5c9ac4205fe 100644 --- a/tests/components/demo/test_vacuum.py +++ b/tests/components/demo/test_vacuum.py @@ -228,7 +228,7 @@ async def test_unsupported_methods(hass): assert "spot" not in state.attributes.get(ATTR_STATUS) assert state.state == STATE_OFF - # VacuumDevice should not support start and pause methods. + # VacuumEntity should not support start and pause methods. hass.states.async_set(ENTITY_VACUUM_COMPLETE, STATE_ON) await hass.async_block_till_done() assert vacuum.is_on(hass, ENTITY_VACUUM_COMPLETE) @@ -243,7 +243,7 @@ async def test_unsupported_methods(hass): await common.async_start(hass, ENTITY_VACUUM_COMPLETE) assert not vacuum.is_on(hass, ENTITY_VACUUM_COMPLETE) - # StateVacuumDevice does not support on/off + # StateVacuumEntity does not support on/off await common.async_turn_on(hass, entity_id=ENTITY_VACUUM_STATE) state = hass.states.get(ENTITY_VACUUM_STATE) assert state.state != STATE_CLEANING diff --git a/tests/components/vacuum/test_init.py b/tests/components/vacuum/test_init.py new file mode 100644 index 00000000000..9075b385f40 --- /dev/null +++ b/tests/components/vacuum/test_init.py @@ -0,0 +1,18 @@ +"""The tests for Vacuum.""" +from homeassistant.components import vacuum + + +def test_deprecated_base_class(caplog): + """Test deprecated base class.""" + + class CustomVacuum(vacuum.VacuumDevice): + pass + + class CustomStateVacuum(vacuum.StateVacuumDevice): + pass + + CustomVacuum() + assert "VacuumDevice is deprecated, modify CustomVacuum" in caplog.text + + CustomStateVacuum() + assert "StateVacuumDevice is deprecated, modify CustomStateVacuum" in caplog.text