Deprecate explicit entity_id in template platforms (#11123)

* Deprecate explicit entity_id in template platforms

* Use config validator for deprecation

* Fix copy/paste typos

* Also print the config value

* Add test for config validator

* Assert the module name that logged the message
This commit is contained in:
Anders Melchiorsen 2018-01-10 09:06:26 +01:00 committed by Paulus Schoutsen
parent 88b70e964c
commit 9e0ca719ed
7 changed files with 64 additions and 0 deletions

View File

@ -38,6 +38,11 @@ SENSOR_SCHEMA = vol.Schema({
vol.All(cv.time_period, cv.positive_timedelta),
})
SENSOR_SCHEMA = vol.All(
cv.deprecated(ATTR_ENTITY_ID),
SENSOR_SCHEMA,
)
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
vol.Required(CONF_SENSORS): vol.Schema({cv.slug: SENSOR_SCHEMA}),
})

View File

@ -67,6 +67,11 @@ COVER_SCHEMA = vol.Schema({
vol.Optional(CONF_ENTITY_ID): cv.entity_ids
})
COVER_SCHEMA = vol.All(
cv.deprecated(CONF_ENTITY_ID),
COVER_SCHEMA,
)
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
vol.Required(CONF_COVERS): vol.Schema({cv.slug: COVER_SCHEMA}),
})

View File

@ -44,6 +44,11 @@ LIGHT_SCHEMA = vol.Schema({
vol.Optional(CONF_ENTITY_ID): cv.entity_ids
})
LIGHT_SCHEMA = vol.All(
cv.deprecated(CONF_ENTITY_ID),
LIGHT_SCHEMA,
)
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
vol.Required(CONF_LIGHTS): vol.Schema({cv.slug: LIGHT_SCHEMA}),
})

View File

@ -31,6 +31,11 @@ SENSOR_SCHEMA = vol.Schema({
vol.Optional(ATTR_ENTITY_ID): cv.entity_ids
})
SENSOR_SCHEMA = vol.All(
cv.deprecated(ATTR_ENTITY_ID),
SENSOR_SCHEMA,
)
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
vol.Required(CONF_SENSORS): vol.Schema({cv.slug: SENSOR_SCHEMA}),
})

View File

@ -38,6 +38,11 @@ SWITCH_SCHEMA = vol.Schema({
vol.Optional(ATTR_ENTITY_ID): cv.entity_ids
})
SWITCH_SCHEMA = vol.All(
cv.deprecated(ATTR_ENTITY_ID),
SWITCH_SCHEMA,
)
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
vol.Required(CONF_SWITCHES): vol.Schema({cv.slug: SWITCH_SCHEMA}),
})

View File

@ -5,6 +5,8 @@ import os
import re
from urllib.parse import urlparse
from socket import _GLOBAL_DEFAULT_TIMEOUT
import logging
import inspect
from typing import Any, Union, TypeVar, Callable, Sequence, Dict
@ -430,6 +432,22 @@ def ensure_list_csv(value: Any) -> Sequence:
return ensure_list(value)
def deprecated(key):
"""Log key as deprecated."""
module_name = inspect.getmodule(inspect.stack()[1][0]).__name__
def validator(config):
"""Check if key is in config and log warning."""
if key in config:
logging.getLogger(module_name).warning(
"The '%s' option (with value '%s') is deprecated, please "
"remove it from your configuration.", key, config[key])
return config
return validator
# Validator helpers
def key_dependency(key, dependency):

View File

@ -441,6 +441,27 @@ def test_datetime():
schema('2016-11-23T18:59:08')
def test_deprecated(caplog):
"""Test deprecation log."""
schema = vol.Schema({
'venus': cv.boolean,
'mars': cv.boolean
})
deprecated_schema = vol.All(
cv.deprecated('mars'),
schema
)
deprecated_schema({'venus': True})
assert len(caplog.records) == 0
deprecated_schema({'mars': True})
assert len(caplog.records) == 1
assert caplog.records[0].name == __name__
assert ("The 'mars' option (with value 'True') is deprecated, "
"please remove it from your configuration.") in caplog.text
def test_key_dependency():
"""Test key_dependency validator."""
schema = vol.Schema(cv.key_dependency('beer', 'soda'))