Deprecate conf_update_interval (#20924)

* Deprecate update_interval and replace with scan_interval

* Update tests

* Fix Darksky tests

* Fix Darksky tests correctly

This reverts commit a73384a223ba8a93c682042d9351cd5a7a399183.

* Provide the default for the non deprecated option

* Don't override default schema for sensors
pull/20973/head
Rohan Kapoor 2019-02-16 21:23:09 -08:00 committed by Martin Hjelmare
parent ad9ec2190c
commit 481439d387
15 changed files with 249 additions and 120 deletions

View File

@ -5,7 +5,8 @@ from datetime import timedelta
import voluptuous as vol import voluptuous as vol
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.const import CONF_UPDATE_INTERVAL from homeassistant.const import CONF_UPDATE_INTERVAL, CONF_SCAN_INTERVAL, \
CONF_UPDATE_INTERVAL_INVALIDATION_VERSION
from homeassistant.helpers.discovery import async_load_platform from homeassistant.helpers.discovery import async_load_platform
from homeassistant.helpers.dispatcher import dispatcher_send from homeassistant.helpers.dispatcher import dispatcher_send
from homeassistant.helpers.event import async_track_time_interval from homeassistant.helpers.event import async_track_time_interval
@ -22,13 +23,21 @@ CONF_MANUAL = 'manual'
DEFAULT_INTERVAL = timedelta(hours=1) DEFAULT_INTERVAL = timedelta(hours=1)
CONFIG_SCHEMA = vol.Schema({ CONFIG_SCHEMA = vol.Schema({
DOMAIN: vol.Schema({ DOMAIN: vol.All(
vol.Optional(CONF_UPDATE_INTERVAL, default=DEFAULT_INTERVAL): vol.Schema({
vol.All( vol.Optional(CONF_UPDATE_INTERVAL):
cv.time_period, cv.positive_timedelta vol.All(cv.time_period, cv.positive_timedelta),
), vol.Optional(CONF_SCAN_INTERVAL, default=DEFAULT_INTERVAL):
vol.All(cv.time_period, cv.positive_timedelta),
vol.Optional(CONF_MANUAL, default=False): cv.boolean, vol.Optional(CONF_MANUAL, default=False): cv.boolean,
}) }),
cv.deprecated(
CONF_UPDATE_INTERVAL,
replacement_key=CONF_SCAN_INTERVAL,
invalidation_version=CONF_UPDATE_INTERVAL_INVALIDATION_VERSION,
default=DEFAULT_INTERVAL
)
)
}, extra=vol.ALLOW_EXTRA) }, extra=vol.ALLOW_EXTRA)
@ -39,7 +48,7 @@ async def async_setup(hass, config):
if not conf[CONF_MANUAL]: if not conf[CONF_MANUAL]:
async_track_time_interval( async_track_time_interval(
hass, data.update, conf[CONF_UPDATE_INTERVAL] hass, data.update, conf[CONF_SCAN_INTERVAL]
) )
def update(call=None): def update(call=None):

View File

@ -13,7 +13,8 @@ import async_timeout
import voluptuous as vol import voluptuous as vol
from homeassistant.const import (CONF_URL, CONF_ACCESS_TOKEN, from homeassistant.const import (CONF_URL, CONF_ACCESS_TOKEN,
CONF_UPDATE_INTERVAL, CONF_SCAN_INTERVAL) CONF_UPDATE_INTERVAL, CONF_SCAN_INTERVAL,
CONF_UPDATE_INTERVAL_INVALIDATION_VERSION)
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -32,13 +33,13 @@ CONFIG_SCHEMA = vol.Schema({
vol.Exclusive(CONF_ACCESS_TOKEN, DOMAIN): cv.string, vol.Exclusive(CONF_ACCESS_TOKEN, DOMAIN): cv.string,
vol.Optional(CONF_UPDATE_INTERVAL): vol.Optional(CONF_UPDATE_INTERVAL):
vol.All(cv.time_period, cv.positive_timedelta), vol.All(cv.time_period, cv.positive_timedelta),
vol.Optional(CONF_SCAN_INTERVAL): vol.Optional(CONF_SCAN_INTERVAL, default=DEFAULT_INTERVAL):
vol.All(cv.time_period, cv.positive_timedelta), vol.All(cv.time_period, cv.positive_timedelta),
}), }),
cv.deprecated( cv.deprecated(
CONF_UPDATE_INTERVAL, CONF_UPDATE_INTERVAL,
replacement_key=CONF_SCAN_INTERVAL, replacement_key=CONF_SCAN_INTERVAL,
invalidation_version='1.0.0', invalidation_version=CONF_UPDATE_INTERVAL_INVALIDATION_VERSION,
default=DEFAULT_INTERVAL default=DEFAULT_INTERVAL
) )
) )

View File

@ -5,7 +5,9 @@ import logging
import voluptuous as vol import voluptuous as vol
from homeassistant.const import ( from homeassistant.const import (
CONF_DOMAIN, CONF_HOST, CONF_PASSWORD, CONF_UPDATE_INTERVAL) CONF_HOST, CONF_DOMAIN, CONF_PASSWORD, CONF_UPDATE_INTERVAL,
CONF_SCAN_INTERVAL, CONF_UPDATE_INTERVAL_INVALIDATION_VERSION
)
from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.aiohttp_client import async_get_clientsession
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.event import async_track_time_interval from homeassistant.helpers.event import async_track_time_interval
@ -19,13 +21,23 @@ DOMAIN = 'mythicbeastsdns'
DEFAULT_INTERVAL = timedelta(minutes=10) DEFAULT_INTERVAL = timedelta(minutes=10)
CONFIG_SCHEMA = vol.Schema({ CONFIG_SCHEMA = vol.Schema({
DOMAIN: vol.Schema({ DOMAIN: vol.All(
vol.Schema({
vol.Required(CONF_DOMAIN): cv.string, vol.Required(CONF_DOMAIN): cv.string,
vol.Required(CONF_HOST): cv.string, vol.Required(CONF_HOST): cv.string,
vol.Required(CONF_PASSWORD): cv.string, vol.Required(CONF_PASSWORD): cv.string,
vol.Optional(CONF_UPDATE_INTERVAL, default=DEFAULT_INTERVAL): vol.All( vol.Optional(CONF_UPDATE_INTERVAL):
cv.time_period, cv.positive_timedelta), vol.All(cv.time_period, cv.positive_timedelta),
}) vol.Optional(CONF_SCAN_INTERVAL, default=DEFAULT_INTERVAL):
vol.All(cv.time_period, cv.positive_timedelta),
}),
cv.deprecated(
CONF_UPDATE_INTERVAL,
replacement_key=CONF_SCAN_INTERVAL,
invalidation_version=CONF_UPDATE_INTERVAL_INVALIDATION_VERSION,
default=DEFAULT_INTERVAL
)
)
}, extra=vol.ALLOW_EXTRA) }, extra=vol.ALLOW_EXTRA)
@ -36,7 +48,7 @@ async def async_setup(hass, config):
domain = config[DOMAIN][CONF_DOMAIN] domain = config[DOMAIN][CONF_DOMAIN]
password = config[DOMAIN][CONF_PASSWORD] password = config[DOMAIN][CONF_PASSWORD]
host = config[DOMAIN][CONF_HOST] host = config[DOMAIN][CONF_HOST]
update_interval = config[DOMAIN][CONF_UPDATE_INTERVAL] update_interval = config[DOMAIN][CONF_SCAN_INTERVAL]
session = async_get_clientsession(hass) session = async_get_clientsession(hass)

View File

@ -14,7 +14,8 @@ import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import ( from homeassistant.const import (
CONF_HOST, CONF_MAC, CONF_MONITORED_CONDITIONS, CONF_NAME, TEMP_CELSIUS, CONF_HOST, CONF_MAC, CONF_MONITORED_CONDITIONS, CONF_NAME, TEMP_CELSIUS,
CONF_TIMEOUT, CONF_UPDATE_INTERVAL) CONF_TIMEOUT, CONF_UPDATE_INTERVAL, CONF_SCAN_INTERVAL,
CONF_UPDATE_INTERVAL_INVALIDATION_VERSION)
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
from homeassistant.util import Throttle from homeassistant.util import Throttle
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
@ -25,6 +26,7 @@ _LOGGER = logging.getLogger(__name__)
DEVICE_DEFAULT_NAME = 'Broadlink sensor' DEVICE_DEFAULT_NAME = 'Broadlink sensor'
DEFAULT_TIMEOUT = 10 DEFAULT_TIMEOUT = 10
SCAN_INTERVAL = timedelta(seconds=300)
SENSOR_TYPES = { SENSOR_TYPES = {
'temperature': ['Temperature', TEMP_CELSIUS], 'temperature': ['Temperature', TEMP_CELSIUS],
@ -34,16 +36,24 @@ SENSOR_TYPES = {
'noise': ['Noise', ' '], 'noise': ['Noise', ' '],
} }
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ PLATFORM_SCHEMA = vol.All(
PLATFORM_SCHEMA.extend({
vol.Optional(CONF_NAME, default=DEVICE_DEFAULT_NAME): vol.Coerce(str), vol.Optional(CONF_NAME, default=DEVICE_DEFAULT_NAME): vol.Coerce(str),
vol.Optional(CONF_MONITORED_CONDITIONS, default=[]): vol.Optional(CONF_MONITORED_CONDITIONS, default=[]):
vol.All(cv.ensure_list, [vol.In(SENSOR_TYPES)]), vol.All(cv.ensure_list, [vol.In(SENSOR_TYPES)]),
vol.Optional(CONF_UPDATE_INTERVAL, default=timedelta(seconds=300)): ( vol.Optional(CONF_UPDATE_INTERVAL):
vol.All(cv.time_period, cv.positive_timedelta)), vol.All(cv.time_period, cv.positive_timedelta),
vol.Required(CONF_HOST): cv.string, vol.Required(CONF_HOST): cv.string,
vol.Required(CONF_MAC): cv.string, vol.Required(CONF_MAC): cv.string,
vol.Optional(CONF_TIMEOUT, default=DEFAULT_TIMEOUT): cv.positive_int vol.Optional(CONF_TIMEOUT, default=DEFAULT_TIMEOUT): cv.positive_int
}) }),
cv.deprecated(
CONF_UPDATE_INTERVAL,
replacement_key=CONF_SCAN_INTERVAL,
invalidation_version=CONF_UPDATE_INTERVAL_INVALIDATION_VERSION,
default=SCAN_INTERVAL
)
)
def setup_platform(hass, config, add_entities, discovery_info=None): def setup_platform(hass, config, add_entities, discovery_info=None):
@ -53,7 +63,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
mac_addr = binascii.unhexlify(mac) mac_addr = binascii.unhexlify(mac)
name = config.get(CONF_NAME) name = config.get(CONF_NAME)
timeout = config.get(CONF_TIMEOUT) timeout = config.get(CONF_TIMEOUT)
update_interval = config.get(CONF_UPDATE_INTERVAL) update_interval = config.get(CONF_SCAN_INTERVAL, SCAN_INTERVAL)
broadlink_data = BroadlinkData(update_interval, host, mac_addr, timeout) broadlink_data = BroadlinkData(update_interval, host, mac_addr, timeout)
dev = [] dev = []
for variable in config[CONF_MONITORED_CONDITIONS]: for variable in config[CONF_MONITORED_CONDITIONS]:

View File

@ -14,7 +14,8 @@ import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import ( from homeassistant.const import (
ATTR_ATTRIBUTION, CONF_API_KEY, CONF_LATITUDE, CONF_LONGITUDE, ATTR_ATTRIBUTION, CONF_API_KEY, CONF_LATITUDE, CONF_LONGITUDE,
CONF_MONITORED_CONDITIONS, CONF_NAME, UNIT_UV_INDEX, CONF_UPDATE_INTERVAL) CONF_MONITORED_CONDITIONS, CONF_NAME, UNIT_UV_INDEX, CONF_UPDATE_INTERVAL,
CONF_SCAN_INTERVAL, CONF_UPDATE_INTERVAL_INVALIDATION_VERSION)
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
from homeassistant.util import Throttle from homeassistant.util import Throttle
@ -30,8 +31,8 @@ CONF_LANGUAGE = 'language'
CONF_UNITS = 'units' CONF_UNITS = 'units'
DEFAULT_LANGUAGE = 'en' DEFAULT_LANGUAGE = 'en'
DEFAULT_NAME = 'Dark Sky' DEFAULT_NAME = 'Dark Sky'
SCAN_INTERVAL = timedelta(seconds=300)
DEPRECATED_SENSOR_TYPES = { DEPRECATED_SENSOR_TYPES = {
'apparent_temperature_max', 'apparent_temperature_max',
@ -167,23 +168,39 @@ LANGUAGE_CODES = [
'tet', 'tr', 'uk', 'x-pig-latin', 'zh', 'zh-tw', 'tet', 'tr', 'uk', 'x-pig-latin', 'zh', 'zh-tw',
] ]
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ ALLOWED_UNITS = ['auto', 'si', 'us', 'ca', 'uk', 'uk2']
PLATFORM_SCHEMA = vol.All(
PLATFORM_SCHEMA.extend({
vol.Required(CONF_MONITORED_CONDITIONS): vol.Required(CONF_MONITORED_CONDITIONS):
vol.All(cv.ensure_list, [vol.In(SENSOR_TYPES)]), vol.All(cv.ensure_list, [vol.In(SENSOR_TYPES)]),
vol.Required(CONF_API_KEY): cv.string, vol.Required(CONF_API_KEY): cv.string,
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
vol.Optional(CONF_UNITS): vol.In(['auto', 'si', 'us', 'ca', 'uk', 'uk2']), vol.Optional(CONF_UNITS): vol.In(ALLOWED_UNITS),
vol.Optional(CONF_LANGUAGE, vol.Optional(CONF_LANGUAGE,
default=DEFAULT_LANGUAGE): vol.In(LANGUAGE_CODES), default=DEFAULT_LANGUAGE): vol.In(LANGUAGE_CODES),
vol.Inclusive(CONF_LATITUDE, 'coordinates', vol.Inclusive(
'Latitude and longitude must exist together'): cv.latitude, CONF_LATITUDE,
vol.Inclusive(CONF_LONGITUDE, 'coordinates', 'coordinates',
'Latitude and longitude must exist together'): cv.longitude, 'Latitude and longitude must exist together'
vol.Optional(CONF_UPDATE_INTERVAL, default=timedelta(seconds=300)): ( ): cv.latitude,
vol.All(cv.time_period, cv.positive_timedelta)), vol.Inclusive(
CONF_LONGITUDE,
'coordinates',
'Latitude and longitude must exist together'
): cv.longitude,
vol.Optional(CONF_UPDATE_INTERVAL):
vol.All(cv.time_period, cv.positive_timedelta),
vol.Optional(CONF_FORECAST): vol.Optional(CONF_FORECAST):
vol.All(cv.ensure_list, [vol.Range(min=0, max=7)]), vol.All(cv.ensure_list, [vol.Range(min=0, max=7)]),
}) }),
cv.deprecated(
CONF_UPDATE_INTERVAL,
replacement_key=CONF_SCAN_INTERVAL,
invalidation_version=CONF_UPDATE_INTERVAL_INVALIDATION_VERSION,
default=SCAN_INTERVAL
)
)
def setup_platform(hass, config, add_entities, discovery_info=None): def setup_platform(hass, config, add_entities, discovery_info=None):
@ -191,7 +208,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
latitude = config.get(CONF_LATITUDE, hass.config.latitude) latitude = config.get(CONF_LATITUDE, hass.config.latitude)
longitude = config.get(CONF_LONGITUDE, hass.config.longitude) longitude = config.get(CONF_LONGITUDE, hass.config.longitude)
language = config.get(CONF_LANGUAGE) language = config.get(CONF_LANGUAGE)
interval = config.get(CONF_UPDATE_INTERVAL) interval = config.get(CONF_SCAN_INTERVAL, SCAN_INTERVAL)
if CONF_UNITS in config: if CONF_UNITS in config:
units = config[CONF_UNITS] units = config[CONF_UNITS]

View File

@ -12,7 +12,9 @@ import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import (CONF_NAME, CONF_USERNAME, CONF_PASSWORD, from homeassistant.const import (CONF_NAME, CONF_USERNAME, CONF_PASSWORD,
ATTR_ATTRIBUTION, CONF_UPDATE_INTERVAL) ATTR_ATTRIBUTION, CONF_UPDATE_INTERVAL,
CONF_SCAN_INTERVAL,
CONF_UPDATE_INTERVAL_INVALIDATION_VERSION)
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
from homeassistant.util import slugify from homeassistant.util import slugify
from homeassistant.util import Throttle from homeassistant.util import Throttle
@ -31,13 +33,23 @@ ICON = 'mdi:package-variant-closed'
STATUS_DELIVERED = 'delivered' STATUS_DELIVERED = 'delivered'
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ SCAN_INTERVAL = timedelta(seconds=1800)
PLATFORM_SCHEMA = vol.All(
PLATFORM_SCHEMA.extend({
vol.Required(CONF_USERNAME): cv.string, vol.Required(CONF_USERNAME): cv.string,
vol.Required(CONF_PASSWORD): cv.string, vol.Required(CONF_PASSWORD): cv.string,
vol.Optional(CONF_NAME): cv.string, vol.Optional(CONF_NAME): cv.string,
vol.Optional(CONF_UPDATE_INTERVAL, default=timedelta(seconds=1800)): vol.Optional(CONF_UPDATE_INTERVAL):
vol.All(cv.time_period, cv.positive_timedelta), vol.All(cv.time_period, cv.positive_timedelta),
}) }),
cv.deprecated(
CONF_UPDATE_INTERVAL,
replacement_key=CONF_SCAN_INTERVAL,
invalidation_version=CONF_UPDATE_INTERVAL_INVALIDATION_VERSION,
default=SCAN_INTERVAL
)
)
def setup_platform(hass, config, add_entities, discovery_info=None): def setup_platform(hass, config, add_entities, discovery_info=None):
@ -45,7 +57,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
import fedexdeliverymanager import fedexdeliverymanager
name = config.get(CONF_NAME) name = config.get(CONF_NAME)
update_interval = config.get(CONF_UPDATE_INTERVAL) update_interval = config.get(CONF_SCAN_INTERVAL, SCAN_INTERVAL)
try: try:
cookie = hass.config.path(COOKIE) cookie = hass.config.path(COOKIE)

View File

@ -12,7 +12,9 @@ import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import (CONF_NAME, CONF_USERNAME, CONF_PASSWORD, from homeassistant.const import (CONF_NAME, CONF_USERNAME, CONF_PASSWORD,
ATTR_ATTRIBUTION, CONF_UPDATE_INTERVAL) ATTR_ATTRIBUTION, CONF_UPDATE_INTERVAL,
CONF_SCAN_INTERVAL,
CONF_UPDATE_INTERVAL_INVALIDATION_VERSION)
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
from homeassistant.util import slugify from homeassistant.util import slugify
from homeassistant.util import Throttle from homeassistant.util import Throttle
@ -28,13 +30,23 @@ COOKIE = 'upsmychoice_cookies.pickle'
ICON = 'mdi:package-variant-closed' ICON = 'mdi:package-variant-closed'
STATUS_DELIVERED = 'delivered' STATUS_DELIVERED = 'delivered'
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ SCAN_INTERVAL = timedelta(seconds=1800)
PLATFORM_SCHEMA = vol.All(
PLATFORM_SCHEMA.extend({
vol.Required(CONF_USERNAME): cv.string, vol.Required(CONF_USERNAME): cv.string,
vol.Required(CONF_PASSWORD): cv.string, vol.Required(CONF_PASSWORD): cv.string,
vol.Optional(CONF_NAME): cv.string, vol.Optional(CONF_NAME): cv.string,
vol.Optional(CONF_UPDATE_INTERVAL, default=timedelta(seconds=1800)): ( vol.Optional(CONF_UPDATE_INTERVAL): (
vol.All(cv.time_period, cv.positive_timedelta)), vol.All(cv.time_period, cv.positive_timedelta)),
}) }),
cv.deprecated(
CONF_UPDATE_INTERVAL,
replacement_key=CONF_SCAN_INTERVAL,
invalidation_version=CONF_UPDATE_INTERVAL_INVALIDATION_VERSION,
default=SCAN_INTERVAL
)
)
def setup_platform(hass, config, add_entities, discovery_info=None): def setup_platform(hass, config, add_entities, discovery_info=None):
@ -49,8 +61,11 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
_LOGGER.exception("Could not connect to UPS My Choice") _LOGGER.exception("Could not connect to UPS My Choice")
return False return False
add_entities([UPSSensor(session, config.get(CONF_NAME), add_entities([UPSSensor(
config.get(CONF_UPDATE_INTERVAL))], True) session,
config.get(CONF_NAME),
config.get(CONF_SCAN_INTERVAL, SCAN_INTERVAL)
)], True)
class UPSSensor(Entity): class UPSSensor(Entity):

View File

@ -8,7 +8,8 @@ import homeassistant.helpers.config_validation as cv
from homeassistant.components.speedtestdotnet.const import DOMAIN, \ from homeassistant.components.speedtestdotnet.const import DOMAIN, \
DATA_UPDATED, SENSOR_TYPES DATA_UPDATED, SENSOR_TYPES
from homeassistant.const import CONF_MONITORED_CONDITIONS, \ from homeassistant.const import CONF_MONITORED_CONDITIONS, \
CONF_UPDATE_INTERVAL CONF_UPDATE_INTERVAL, CONF_SCAN_INTERVAL, \
CONF_UPDATE_INTERVAL_INVALIDATION_VERSION
from homeassistant.helpers.discovery import async_load_platform from homeassistant.helpers.discovery import async_load_platform
from homeassistant.helpers.dispatcher import dispatcher_send from homeassistant.helpers.dispatcher import dispatcher_send
from homeassistant.helpers.event import async_track_time_interval from homeassistant.helpers.event import async_track_time_interval
@ -24,16 +25,26 @@ CONF_MANUAL = 'manual'
DEFAULT_INTERVAL = timedelta(hours=1) DEFAULT_INTERVAL = timedelta(hours=1)
CONFIG_SCHEMA = vol.Schema({ CONFIG_SCHEMA = vol.Schema({
DOMAIN: vol.Schema({ DOMAIN: vol.All(
vol.Schema({
vol.Optional(CONF_SERVER_ID): cv.positive_int, vol.Optional(CONF_SERVER_ID): cv.positive_int,
vol.Optional(CONF_UPDATE_INTERVAL, default=DEFAULT_INTERVAL): vol.Optional(CONF_UPDATE_INTERVAL):
vol.All( vol.All(cv.time_period, cv.positive_timedelta),
cv.time_period, cv.positive_timedelta vol.Optional(CONF_SCAN_INTERVAL, default=DEFAULT_INTERVAL):
), vol.All(cv.time_period, cv.positive_timedelta),
vol.Optional(CONF_MANUAL, default=False): cv.boolean, vol.Optional(CONF_MANUAL, default=False): cv.boolean,
vol.Optional(CONF_MONITORED_CONDITIONS, default=list(SENSOR_TYPES)): vol.Optional(
vol.All(cv.ensure_list, [vol.In(list(SENSOR_TYPES))]) CONF_MONITORED_CONDITIONS,
}) default=list(SENSOR_TYPES)
): vol.All(cv.ensure_list, [vol.In(list(SENSOR_TYPES))])
}),
cv.deprecated(
CONF_UPDATE_INTERVAL,
replacement_key=CONF_SCAN_INTERVAL,
invalidation_version=CONF_UPDATE_INTERVAL_INVALIDATION_VERSION,
default=DEFAULT_INTERVAL
)
)
}, extra=vol.ALLOW_EXTRA) }, extra=vol.ALLOW_EXTRA)
@ -44,7 +55,7 @@ async def async_setup(hass, config):
if not conf[CONF_MANUAL]: if not conf[CONF_MANUAL]:
async_track_time_interval( async_track_time_interval(
hass, data.update, conf[CONF_UPDATE_INTERVAL] hass, data.update, conf[CONF_SCAN_INTERVAL]
) )
def update(call=None): def update(call=None):

View File

@ -6,7 +6,8 @@ import logging
import voluptuous as vol import voluptuous as vol
from homeassistant import config_entries from homeassistant import config_entries
from homeassistant.const import CONF_UPDATE_INTERVAL from homeassistant.const import CONF_UPDATE_INTERVAL, CONF_SCAN_INTERVAL, \
CONF_UPDATE_INTERVAL_INVALIDATION_VERSION
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.dispatcher import async_dispatcher_send from homeassistant.helpers.dispatcher import async_dispatcher_send
from homeassistant.helpers.event import async_call_later from homeassistant.helpers.event import async_call_later
@ -23,17 +24,23 @@ REQUIREMENTS = ['tellduslive==0.10.10']
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
CONFIG_SCHEMA = vol.Schema( CONFIG_SCHEMA = vol.Schema({
{ DOMAIN: vol.All(
DOMAIN:
vol.Schema({ vol.Schema({
vol.Optional(CONF_HOST, default=DOMAIN): cv.string, vol.Optional(CONF_HOST, default=DOMAIN): cv.string,
vol.Optional(CONF_UPDATE_INTERVAL, default=SCAN_INTERVAL): vol.Optional(CONF_UPDATE_INTERVAL):
(vol.All(cv.time_period, vol.Clamp(min=MIN_UPDATE_INTERVAL))) vol.All(cv.time_period, vol.Clamp(min=MIN_UPDATE_INTERVAL)),
vol.Optional(CONF_SCAN_INTERVAL, default=SCAN_INTERVAL):
vol.All(cv.time_period, vol.Clamp(min=MIN_UPDATE_INTERVAL)),
}), }),
}, cv.deprecated(
extra=vol.ALLOW_EXTRA, CONF_UPDATE_INTERVAL,
) replacement_key=CONF_SCAN_INTERVAL,
invalidation_version=CONF_UPDATE_INTERVAL_INVALIDATION_VERSION,
default=SCAN_INTERVAL
)
)
}, extra=vol.ALLOW_EXTRA)
DATA_CONFIG_ENTRY_LOCK = 'tellduslive_config_entry_lock' DATA_CONFIG_ENTRY_LOCK = 'tellduslive_config_entry_lock'
CONFIG_ENTRY_IS_SETUP = 'telldus_config_entry_is_setup' CONFIG_ENTRY_IS_SETUP = 'telldus_config_entry_is_setup'
@ -102,7 +109,7 @@ async def async_setup(hass, config):
context={'source': config_entries.SOURCE_IMPORT}, context={'source': config_entries.SOURCE_IMPORT},
data={ data={
KEY_HOST: config[DOMAIN].get(CONF_HOST), KEY_HOST: config[DOMAIN].get(CONF_HOST),
KEY_SCAN_INTERVAL: config[DOMAIN].get(CONF_UPDATE_INTERVAL), KEY_SCAN_INTERVAL: config[DOMAIN][CONF_SCAN_INTERVAL],
})) }))
return True return True

View File

@ -6,7 +6,8 @@ import voluptuous as vol
from homeassistant.const import (CONF_USERNAME, CONF_PASSWORD, from homeassistant.const import (CONF_USERNAME, CONF_PASSWORD,
CONF_NAME, CONF_RESOURCES, CONF_NAME, CONF_RESOURCES,
CONF_UPDATE_INTERVAL) CONF_UPDATE_INTERVAL, CONF_SCAN_INTERVAL,
CONF_UPDATE_INTERVAL_INVALIDATION_VERSION)
from homeassistant.helpers import discovery from homeassistant.helpers import discovery
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
@ -83,11 +84,14 @@ RESOURCES = [
] ]
CONFIG_SCHEMA = vol.Schema({ CONFIG_SCHEMA = vol.Schema({
DOMAIN: vol.Schema({ DOMAIN: vol.All(
vol.Schema({
vol.Required(CONF_USERNAME): cv.string, vol.Required(CONF_USERNAME): cv.string,
vol.Required(CONF_PASSWORD): cv.string, vol.Required(CONF_PASSWORD): cv.string,
vol.Optional(CONF_UPDATE_INTERVAL, default=DEFAULT_UPDATE_INTERVAL): ( vol.Optional(CONF_UPDATE_INTERVAL):
vol.All(cv.time_period, vol.Clamp(min=MIN_UPDATE_INTERVAL))), vol.All(cv.time_period, vol.Clamp(min=MIN_UPDATE_INTERVAL)),
vol.Optional(CONF_SCAN_INTERVAL, default=DEFAULT_UPDATE_INTERVAL):
vol.All(cv.time_period, vol.Clamp(min=MIN_UPDATE_INTERVAL)),
vol.Optional(CONF_NAME, default={}): vol.Optional(CONF_NAME, default={}):
cv.schema_with_slug_keys(cv.string), cv.schema_with_slug_keys(cv.string),
vol.Optional(CONF_RESOURCES): vol.All( vol.Optional(CONF_RESOURCES): vol.All(
@ -97,6 +101,13 @@ CONFIG_SCHEMA = vol.Schema({
vol.Optional(CONF_MUTABLE, default=True): cv.boolean, vol.Optional(CONF_MUTABLE, default=True): cv.boolean,
vol.Optional(CONF_SCANDINAVIAN_MILES, default=False): cv.boolean, vol.Optional(CONF_SCANDINAVIAN_MILES, default=False): cv.boolean,
}), }),
cv.deprecated(
CONF_UPDATE_INTERVAL,
replacement_key=CONF_SCAN_INTERVAL,
invalidation_version=CONF_UPDATE_INTERVAL_INVALIDATION_VERSION,
default=DEFAULT_UPDATE_INTERVAL
)
)
}, extra=vol.ALLOW_EXTRA) }, extra=vol.ALLOW_EXTRA)
@ -112,7 +123,7 @@ async def async_setup(hass, config):
service_url=config[DOMAIN].get(CONF_SERVICE_URL), service_url=config[DOMAIN].get(CONF_SERVICE_URL),
region=config[DOMAIN].get(CONF_REGION)) region=config[DOMAIN].get(CONF_REGION))
interval = config[DOMAIN].get(CONF_UPDATE_INTERVAL) interval = config[DOMAIN][CONF_SCAN_INTERVAL]
data = hass.data[DATA_KEY] = VolvoData(config) data = hass.data[DATA_KEY] = VolvoData(config)

View File

@ -147,7 +147,11 @@ CONF_TTL = 'ttl'
CONF_TYPE = 'type' CONF_TYPE = 'type'
CONF_UNIT_OF_MEASUREMENT = 'unit_of_measurement' CONF_UNIT_OF_MEASUREMENT = 'unit_of_measurement'
CONF_UNIT_SYSTEM = 'unit_system' CONF_UNIT_SYSTEM = 'unit_system'
# Deprecated in 0.88.0, invalidated in 0.91.0, remove in 0.92.0
CONF_UPDATE_INTERVAL = 'update_interval' CONF_UPDATE_INTERVAL = 'update_interval'
CONF_UPDATE_INTERVAL_INVALIDATION_VERSION = '0.91.0'
CONF_URL = 'url' CONF_URL = 'url'
CONF_USERNAME = 'username' CONF_USERNAME = 'username'
CONF_VALUE_TEMPLATE = 'value_template' CONF_VALUE_TEMPLATE = 'value_template'

View File

@ -606,7 +606,8 @@ def deprecated(key: str,
else: else:
value = default value = default
if (replacement_key if (replacement_key
and replacement_key not in config and (replacement_key not in config
or default == config.get(replacement_key))
and value is not None): and value is not None):
config[replacement_key] = value config[replacement_key] = value

View File

@ -24,7 +24,7 @@ def setup_freedns(hass, aioclient_mock):
hass.loop.run_until_complete(async_setup_component(hass, freedns.DOMAIN, { hass.loop.run_until_complete(async_setup_component(hass, freedns.DOMAIN, {
freedns.DOMAIN: { freedns.DOMAIN: {
'access_token': ACCESS_TOKEN, 'access_token': ACCESS_TOKEN,
'update_interval': UPDATE_INTERVAL, 'scan_interval': UPDATE_INTERVAL,
} }
})) }))
@ -62,7 +62,7 @@ def test_setup_fails_if_wrong_token(hass, aioclient_mock):
result = yield from async_setup_component(hass, freedns.DOMAIN, { result = yield from async_setup_component(hass, freedns.DOMAIN, {
freedns.DOMAIN: { freedns.DOMAIN: {
'access_token': ACCESS_TOKEN, 'access_token': ACCESS_TOKEN,
'update_interval': UPDATE_INTERVAL, 'scan_interval': UPDATE_INTERVAL,
} }
}) })
assert not result assert not result

View File

@ -21,7 +21,7 @@ VALID_CONFIG_MINIMAL = {
'api_key': 'foo', 'api_key': 'foo',
'forecast': [1, 2], 'forecast': [1, 2],
'monitored_conditions': ['summary', 'icon', 'temperature_high'], 'monitored_conditions': ['summary', 'icon', 'temperature_high'],
'update_interval': timedelta(seconds=120), 'scan_interval': timedelta(seconds=120),
} }
} }
@ -31,7 +31,7 @@ INVALID_CONFIG_MINIMAL = {
'api_key': 'foo', 'api_key': 'foo',
'forecast': [1, 2], 'forecast': [1, 2],
'monitored_conditions': ['sumary', 'iocn', 'temperature_high'], 'monitored_conditions': ['sumary', 'iocn', 'temperature_high'],
'update_interval': timedelta(seconds=120), 'scan_interval': timedelta(seconds=120),
} }
} }
@ -45,7 +45,7 @@ VALID_CONFIG_LANG_DE = {
'monitored_conditions': ['summary', 'icon', 'temperature_high', 'monitored_conditions': ['summary', 'icon', 'temperature_high',
'minutely_summary', 'hourly_summary', 'minutely_summary', 'hourly_summary',
'daily_summary', 'humidity', ], 'daily_summary', 'humidity', ],
'update_interval': timedelta(seconds=120), 'scan_interval': timedelta(seconds=120),
} }
} }
@ -56,7 +56,7 @@ INVALID_CONFIG_LANG = {
'forecast': [1, 2], 'forecast': [1, 2],
'language': 'yz', 'language': 'yz',
'monitored_conditions': ['summary', 'icon', 'temperature_high'], 'monitored_conditions': ['summary', 'icon', 'temperature_high'],
'update_interval': timedelta(seconds=120), 'scan_interval': timedelta(seconds=120),
} }
} }
@ -138,8 +138,11 @@ class TestDarkSkySetup(unittest.TestCase):
msg = '400 Client Error: Bad Request for url: {}'.format(url) msg = '400 Client Error: Bad Request for url: {}'.format(url)
mock_get_forecast.side_effect = HTTPError(msg,) mock_get_forecast.side_effect = HTTPError(msg,)
response = darksky.setup_platform(self.hass, VALID_CONFIG_MINIMAL, response = darksky.setup_platform(
MagicMock()) self.hass,
VALID_CONFIG_MINIMAL['sensor'],
MagicMock()
)
assert not response assert not response
@requests_mock.Mocker() @requests_mock.Mocker()

View File

@ -713,7 +713,7 @@ def test_deprecated_with_default(caplog, schema):
def test_deprecated_with_replacement_key_and_default(caplog, schema): def test_deprecated_with_replacement_key_and_default(caplog, schema):
""" """
Test deprecation behaves correctly when only a replacement key is provided. Test deprecation with a replacement key and default.
Expected behavior: Expected behavior:
- Outputs the appropriate deprecation warning if key is detected - Outputs the appropriate deprecation warning if key is detected
@ -748,6 +748,22 @@ def test_deprecated_with_replacement_key_and_default(caplog, schema):
assert len(caplog.records) == 0 assert len(caplog.records) == 0
assert {'venus': True, 'jupiter': False} == output assert {'venus': True, 'jupiter': False} == output
deprecated_schema_with_default = vol.All(
vol.Schema({
'venus': cv.boolean,
vol.Optional('mars', default=False): cv.boolean,
vol.Optional('jupiter', default=False): cv.boolean
}),
cv.deprecated('mars', replacement_key='jupiter', default=False)
)
test_data = {'mars': True}
output = deprecated_schema_with_default(test_data.copy())
assert len(caplog.records) == 1
assert ("The 'mars' option (with value 'True') is deprecated, "
"please replace it with 'jupiter'") in caplog.text
assert {'jupiter': True} == output
def test_deprecated_with_replacement_key_invalidation_version_default( def test_deprecated_with_replacement_key_invalidation_version_default(
caplog, schema, version caplog, schema, version