diff --git a/homeassistant/components/light/rflink.py b/homeassistant/components/light/rflink.py index fb054407dff..0b56f1de0ac 100644 --- a/homeassistant/components/light/rflink.py +++ b/homeassistant/components/light/rflink.py @@ -10,13 +10,16 @@ import logging from homeassistant.components.light import ( ATTR_BRIGHTNESS, SUPPORT_BRIGHTNESS, Light) from homeassistant.components.rflink import ( - CONF_ALIASSES, CONF_AUTOMATIC_ADD, CONF_DEVICE_DEFAULTS, CONF_DEVICES, - CONF_FIRE_EVENT, CONF_GROUP, CONF_GROUP_ALIASSES, CONF_IGNORE_DEVICES, + CONF_ALIASES, CONF_ALIASSES, CONF_AUTOMATIC_ADD, CONF_DEVICE_DEFAULTS, + CONF_DEVICES, CONF_FIRE_EVENT, CONF_GROUP, CONF_GROUP_ALIASES, + CONF_GROUP_ALIASSES, CONF_IGNORE_DEVICES, CONF_NOGROUP_ALIASES, CONF_NOGROUP_ALIASSES, CONF_SIGNAL_REPETITIONS, DATA_DEVICE_REGISTER, DATA_ENTITY_GROUP_LOOKUP, DATA_ENTITY_LOOKUP, DEVICE_DEFAULTS_SCHEMA, - DOMAIN, EVENT_KEY_COMMAND, EVENT_KEY_ID, SwitchableRflinkDevice, cv, vol) + DOMAIN, EVENT_KEY_COMMAND, EVENT_KEY_ID, SwitchableRflinkDevice, cv, + remove_deprecated, vol) from homeassistant.const import ( CONF_NAME, CONF_PLATFORM, CONF_TYPE, STATE_UNKNOWN) +from homeassistant.helpers.deprecation import get_deprecated DEPENDENCIES = ['rflink'] @@ -39,15 +42,22 @@ PLATFORM_SCHEMA = vol.Schema({ vol.Optional(CONF_TYPE): vol.Any(TYPE_DIMMABLE, TYPE_SWITCHABLE, TYPE_HYBRID, TYPE_TOGGLE), - vol.Optional(CONF_ALIASSES, default=[]): + vol.Optional(CONF_ALIASES, default=[]): vol.All(cv.ensure_list, [cv.string]), - vol.Optional(CONF_GROUP_ALIASSES, default=[]): + vol.Optional(CONF_GROUP_ALIASES, default=[]): vol.All(cv.ensure_list, [cv.string]), - vol.Optional(CONF_NOGROUP_ALIASSES, default=[]): + vol.Optional(CONF_NOGROUP_ALIASES, default=[]): vol.All(cv.ensure_list, [cv.string]), vol.Optional(CONF_FIRE_EVENT, default=False): cv.boolean, vol.Optional(CONF_SIGNAL_REPETITIONS): vol.Coerce(int), vol.Optional(CONF_GROUP, default=True): cv.boolean, + # deprecated config options + vol.Optional(CONF_ALIASSES): + vol.All(cv.ensure_list, [cv.string]), + vol.Optional(CONF_GROUP_ALIASSES): + vol.All(cv.ensure_list, [cv.string]), + vol.Optional(CONF_NOGROUP_ALIASSES): + vol.All(cv.ensure_list, [cv.string]), }, }), }) @@ -103,6 +113,7 @@ def devices_from_config(domain_config, hass=None): entity_class = entity_class_for_type(entity_type) device_config = dict(domain_config[CONF_DEVICE_DEFAULTS], **config) + remove_deprecated(device_config) is_hybrid = entity_class is HybridRflinkLight @@ -117,25 +128,27 @@ def devices_from_config(domain_config, hass=None): device = entity_class(device_id, hass, **device_config) devices.append(device) - # Register entity (and aliasses) to listen to incoming rflink events + # Register entity (and aliases) to listen to incoming rflink events - # Device id and normal aliasses respond to normal and group command + # Device id and normal aliases respond to normal and group command hass.data[DATA_ENTITY_LOOKUP][ EVENT_KEY_COMMAND][device_id].append(device) if config[CONF_GROUP]: hass.data[DATA_ENTITY_GROUP_LOOKUP][ EVENT_KEY_COMMAND][device_id].append(device) - for _id in config[CONF_ALIASSES]: + for _id in get_deprecated(config, CONF_ALIASES, CONF_ALIASSES): hass.data[DATA_ENTITY_LOOKUP][ EVENT_KEY_COMMAND][_id].append(device) hass.data[DATA_ENTITY_GROUP_LOOKUP][ EVENT_KEY_COMMAND][_id].append(device) - # group_aliasses only respond to group commands - for _id in config[CONF_GROUP_ALIASSES]: + # group_aliases only respond to group commands + for _id in get_deprecated( + config, CONF_GROUP_ALIASES, CONF_GROUP_ALIASSES): hass.data[DATA_ENTITY_GROUP_LOOKUP][ EVENT_KEY_COMMAND][_id].append(device) - # nogroup_aliasses only respond to normal commands - for _id in config[CONF_NOGROUP_ALIASSES]: + # nogroup_aliases only respond to normal commands + for _id in get_deprecated( + config, CONF_NOGROUP_ALIASES, CONF_NOGROUP_ALIASSES): hass.data[DATA_ENTITY_LOOKUP][ EVENT_KEY_COMMAND][_id].append(device) diff --git a/homeassistant/components/rflink.py b/homeassistant/components/rflink.py index 6de5788b1dc..2cdce927cd8 100644 --- a/homeassistant/components/rflink.py +++ b/homeassistant/components/rflink.py @@ -10,15 +10,15 @@ import functools as ft import logging import async_timeout -import voluptuous as vol - from homeassistant.const import ( ATTR_ENTITY_ID, CONF_HOST, CONF_PORT, EVENT_HOMEASSISTANT_STOP, STATE_UNKNOWN) from homeassistant.core import CoreState, callback from homeassistant.exceptions import HomeAssistantError import homeassistant.helpers.config_validation as cv +from homeassistant.helpers.deprecation import get_deprecated from homeassistant.helpers.entity import Entity +import voluptuous as vol REQUIREMENTS = ['rflink==0.0.34'] @@ -27,9 +27,12 @@ _LOGGER = logging.getLogger(__name__) ATTR_EVENT = 'event' ATTR_STATE = 'state' +CONF_ALIASES = 'aliases' CONF_ALIASSES = 'aliasses' +CONF_GROUP_ALIASES = 'group_aliases' CONF_GROUP_ALIASSES = 'group_aliasses' CONF_GROUP = 'group' +CONF_NOGROUP_ALIASES = 'nogroup_aliases' CONF_NOGROUP_ALIASSES = 'nogroup_aliasses' CONF_DEVICE_DEFAULTS = 'device_defaults' CONF_DEVICES = 'devices' @@ -219,8 +222,8 @@ class RflinkDevice(Entity): platform = None _state = STATE_UNKNOWN - def __init__(self, device_id, hass, name=None, aliasses=None, group=True, - group_aliasses=None, nogroup_aliasses=None, fire_event=False, + def __init__(self, device_id, hass, name=None, aliases=None, group=True, + group_aliases=None, nogroup_aliases=None, fire_event=False, signal_repetitions=DEFAULT_SIGNAL_REPETITIONS): """Initialize the device.""" self.hass = hass @@ -398,3 +401,24 @@ class SwitchableRflinkDevice(RflinkCommand): def async_turn_off(self, **kwargs): """Turn the device off.""" return self._async_handle_command("turn_off") + + +DEPRECATED_CONFIG_OPTIONS = [ + CONF_ALIASSES, + CONF_GROUP_ALIASSES, + CONF_NOGROUP_ALIASSES] +REPLACEMENT_CONFIG_OPTIONS = [ + CONF_ALIASES, + CONF_GROUP_ALIASES, + CONF_NOGROUP_ALIASES] + + +def remove_deprecated(config): + """Remove deprecated config options from device config.""" + for index, deprecated_option in enumerate(DEPRECATED_CONFIG_OPTIONS): + if deprecated_option in config: + replacement_option = REPLACEMENT_CONFIG_OPTIONS[index] + # generate deprecation warning + get_deprecated(config, replacement_option, deprecated_option) + # remove old config value replacing new one + config[replacement_option] = config.pop(deprecated_option) diff --git a/homeassistant/components/sensor/rflink.py b/homeassistant/components/sensor/rflink.py index c6660701c21..0d5fc283e32 100644 --- a/homeassistant/components/sensor/rflink.py +++ b/homeassistant/components/sensor/rflink.py @@ -9,9 +9,9 @@ from functools import partial import logging from homeassistant.components.rflink import ( - CONF_ALIASSES, CONF_AUTOMATIC_ADD, CONF_DEVICES, DATA_DEVICE_REGISTER, - DATA_ENTITY_LOOKUP, DOMAIN, EVENT_KEY_ID, EVENT_KEY_SENSOR, EVENT_KEY_UNIT, - RflinkDevice, cv, vol) + CONF_ALIASES, CONF_ALIASSES, CONF_AUTOMATIC_ADD, CONF_DEVICES, + DATA_DEVICE_REGISTER, DATA_ENTITY_LOOKUP, DOMAIN, EVENT_KEY_ID, + EVENT_KEY_SENSOR, EVENT_KEY_UNIT, RflinkDevice, cv, remove_deprecated, vol) from homeassistant.const import ( ATTR_UNIT_OF_MEASUREMENT, CONF_NAME, CONF_PLATFORM, CONF_UNIT_OF_MEASUREMENT) @@ -36,7 +36,10 @@ PLATFORM_SCHEMA = vol.Schema({ vol.Optional(CONF_NAME): cv.string, vol.Required(CONF_SENSOR_TYPE): cv.string, vol.Optional(CONF_UNIT_OF_MEASUREMENT, default=None): cv.string, - vol.Optional(CONF_ALIASSES, default=[]): + vol.Optional(CONF_ALIASES, default=[]): + vol.All(cv.ensure_list, [cv.string]), + # deprecated config options + vol.Optional(CONF_ALIASSES): vol.All(cv.ensure_list, [cv.string]), }, }), @@ -61,6 +64,7 @@ def devices_from_config(domain_config, hass=None): if not config[ATTR_UNIT_OF_MEASUREMENT]: config[ATTR_UNIT_OF_MEASUREMENT] = lookup_unit_for_sensor_type( config[CONF_SENSOR_TYPE]) + remove_deprecated(config) device = RflinkSensor(device_id, hass, **config) devices.append(device) diff --git a/homeassistant/components/switch/rflink.py b/homeassistant/components/switch/rflink.py index 58b1e0959af..29e93342f66 100644 --- a/homeassistant/components/switch/rflink.py +++ b/homeassistant/components/switch/rflink.py @@ -8,13 +8,15 @@ import asyncio import logging from homeassistant.components.rflink import ( - CONF_ALIASSES, CONF_DEVICE_DEFAULTS, CONF_DEVICES, CONF_FIRE_EVENT, - CONF_GROUP, CONF_GROUP_ALIASSES, CONF_NOGROUP_ALIASSES, - CONF_SIGNAL_REPETITIONS, DATA_ENTITY_GROUP_LOOKUP, DATA_ENTITY_LOOKUP, - DEVICE_DEFAULTS_SCHEMA, DOMAIN, EVENT_KEY_COMMAND, SwitchableRflinkDevice, - cv, vol) + CONF_ALIASES, CONF_ALIASSES, CONF_DEVICE_DEFAULTS, CONF_DEVICES, + CONF_FIRE_EVENT, CONF_GROUP, CONF_GROUP_ALIASES, CONF_GROUP_ALIASSES, + CONF_NOGROUP_ALIASES, CONF_NOGROUP_ALIASSES, CONF_SIGNAL_REPETITIONS, + DATA_ENTITY_GROUP_LOOKUP, DATA_ENTITY_LOOKUP, DEVICE_DEFAULTS_SCHEMA, + DOMAIN, EVENT_KEY_COMMAND, SwitchableRflinkDevice, cv, remove_deprecated, + vol) from homeassistant.components.switch import SwitchDevice from homeassistant.const import CONF_NAME, CONF_PLATFORM +from homeassistant.helpers.deprecation import get_deprecated DEPENDENCIES = ['rflink'] @@ -27,15 +29,22 @@ PLATFORM_SCHEMA = vol.Schema({ vol.Optional(CONF_DEVICES, default={}): vol.Schema({ cv.string: { vol.Optional(CONF_NAME): cv.string, - vol.Optional(CONF_ALIASSES, default=[]): + vol.Optional(CONF_ALIASES, default=[]): vol.All(cv.ensure_list, [cv.string]), - vol.Optional(CONF_GROUP_ALIASSES, default=[]): + vol.Optional(CONF_GROUP_ALIASES, default=[]): vol.All(cv.ensure_list, [cv.string]), - vol.Optional(CONF_NOGROUP_ALIASSES, default=[]): + vol.Optional(CONF_NOGROUP_ALIASES, default=[]): vol.All(cv.ensure_list, [cv.string]), vol.Optional(CONF_FIRE_EVENT, default=False): cv.boolean, vol.Optional(CONF_SIGNAL_REPETITIONS): vol.Coerce(int), vol.Optional(CONF_GROUP, default=True): cv.boolean, + # deprecated config options + vol.Optional(CONF_ALIASSES): + vol.All(cv.ensure_list, [cv.string]), + vol.Optional(CONF_GROUP_ALIASSES): + vol.All(cv.ensure_list, [cv.string]), + vol.Optional(CONF_NOGROUP_ALIASSES): + vol.All(cv.ensure_list, [cv.string]), }, }), }) @@ -46,27 +55,30 @@ def devices_from_config(domain_config, hass=None): devices = [] for device_id, config in domain_config[CONF_DEVICES].items(): device_config = dict(domain_config[CONF_DEVICE_DEFAULTS], **config) + remove_deprecated(device_config) device = RflinkSwitch(device_id, hass, **device_config) devices.append(device) - # Register entity (and aliasses) to listen to incoming rflink events - # Device id and normal aliasses respond to normal and group command + # Register entity (and aliases) to listen to incoming rflink events + # Device id and normal aliases respond to normal and group command hass.data[DATA_ENTITY_LOOKUP][ EVENT_KEY_COMMAND][device_id].append(device) if config[CONF_GROUP]: hass.data[DATA_ENTITY_GROUP_LOOKUP][ EVENT_KEY_COMMAND][device_id].append(device) - for _id in config[CONF_ALIASSES]: + for _id in get_deprecated(config, CONF_ALIASES, CONF_ALIASSES): hass.data[DATA_ENTITY_LOOKUP][ EVENT_KEY_COMMAND][_id].append(device) hass.data[DATA_ENTITY_GROUP_LOOKUP][ EVENT_KEY_COMMAND][_id].append(device) - # group_aliasses only respond to group commands - for _id in config[CONF_GROUP_ALIASSES]: + # group_aliases only respond to group commands + for _id in get_deprecated( + config, CONF_GROUP_ALIASES, CONF_GROUP_ALIASSES): hass.data[DATA_ENTITY_GROUP_LOOKUP][ EVENT_KEY_COMMAND][_id].append(device) - # nogroup_aliasses only respond to normal commands - for _id in config[CONF_NOGROUP_ALIASSES]: + # nogroup_aliases only respond to normal commands + for _id in get_deprecated( + config, CONF_NOGROUP_ALIASES, CONF_NOGROUP_ALIASSES): hass.data[DATA_ENTITY_LOOKUP][ EVENT_KEY_COMMAND][_id].append(device) diff --git a/tests/components/light/test_rflink.py b/tests/components/light/test_rflink.py index 03180c47a4a..25f83b1d123 100644 --- a/tests/components/light/test_rflink.py +++ b/tests/components/light/test_rflink.py @@ -27,7 +27,7 @@ CONFIG = { 'devices': { 'protocol_0_0': { 'name': 'test', - 'aliasses': ['test_alias_0_0'], + 'aliases': ['test_alias_0_0'], }, 'dimmable_0_0': { 'name': 'dim_test', @@ -58,7 +58,7 @@ def test_default_setup(hass, monkeypatch): assert light_initial.attributes['assumed_state'] # light should follow state of the hardware device by interpreting - # incoming events for its name and aliasses + # incoming events for its name and aliases # mock incoming command event for this device event_callback({ @@ -100,7 +100,7 @@ def test_default_setup(hass, monkeypatch): assert hass.states.get(DOMAIN + '.test').state == 'off' - # test following aliasses + # test following aliases # mock incoming command event for this device alias event_callback({ 'id': 'test_alias_0_0', @@ -185,7 +185,7 @@ def test_firing_bus_event(hass, monkeypatch): 'devices': { 'protocol_0_0': { 'name': 'test', - 'aliasses': ['test_alias_0_0'], + 'aliases': ['test_alias_0_0'], 'fire_event': True, }, }, @@ -418,7 +418,7 @@ def test_group_alias(hass, monkeypatch): 'devices': { 'protocol_0_0': { 'name': 'test', - 'group_aliasses': ['test_group_0_0'], + 'group_aliases': ['test_group_0_0'], }, }, }, @@ -461,7 +461,7 @@ def test_nogroup_alias(hass, monkeypatch): 'devices': { 'protocol_0_0': { 'name': 'test', - 'nogroup_aliasses': ['test_nogroup_0_0'], + 'nogroup_aliases': ['test_nogroup_0_0'], }, }, }, diff --git a/tests/components/switch/test_rflink.py b/tests/components/switch/test_rflink.py index d48c9aca7a4..b261d9c9b49 100644 --- a/tests/components/switch/test_rflink.py +++ b/tests/components/switch/test_rflink.py @@ -24,7 +24,7 @@ CONFIG = { 'devices': { 'protocol_0_0': { 'name': 'test', - 'aliasses': ['test_alias_0_0'], + 'aliases': ['test_alias_0_0'], }, }, }, @@ -47,7 +47,7 @@ def test_default_setup(hass, monkeypatch): assert switch_initial.attributes['assumed_state'] # switch should follow state of the hardware device by interpreting - # incoming events for its name and aliasses + # incoming events for its name and aliases # mock incoming command event for this device event_callback({ @@ -70,7 +70,7 @@ def test_default_setup(hass, monkeypatch): assert hass.states.get('switch.test').state == 'off' - # test following aliasses + # test following aliases # mock incoming command event for this device alias event_callback({ 'id': 'test_alias_0_0', @@ -112,7 +112,7 @@ def test_group_alias(hass, monkeypatch): 'devices': { 'protocol_0_0': { 'name': 'test', - 'group_aliasses': ['test_group_0_0'], + 'group_aliases': ['test_group_0_0'], }, }, }, @@ -155,7 +155,7 @@ def test_nogroup_alias(hass, monkeypatch): 'devices': { 'protocol_0_0': { 'name': 'test', - 'nogroup_aliasses': ['test_nogroup_0_0'], + 'nogroup_aliases': ['test_nogroup_0_0'], }, }, }, diff --git a/tests/components/test_rflink.py b/tests/components/test_rflink.py index 9a83644dcfd..ce6b473b465 100644 --- a/tests/components/test_rflink.py +++ b/tests/components/test_rflink.py @@ -99,7 +99,7 @@ def test_send_no_wait(hass, monkeypatch): 'devices': { 'protocol_0_0': { 'name': 'test', - 'aliasses': ['test_alias_0_0'], + 'aliases': ['test_alias_0_0'], }, }, }, @@ -192,7 +192,7 @@ def test_error_when_not_connected(hass, monkeypatch): 'devices': { 'protocol_0_0': { 'name': 'test', - 'aliasses': ['test_alias_0_0'], + 'aliases': ['test_alias_0_0'], }, }, },