From 26bf3fc1c946fe2cc57ffb70ed1f5de4f374f876 Mon Sep 17 00:00:00 2001 From: raman325 <7243222+raman325@users.noreply.github.com> Date: Mon, 6 Jan 2020 11:43:58 -0500 Subject: [PATCH 01/10] move constants, move schema validation to init, prepare for zeroconf/config flow --- homeassistant/components/vizio/__init__.py | 50 ++++++++++++++ homeassistant/components/vizio/const.py | 14 ++++ homeassistant/components/vizio/manifest.json | 2 +- .../components/vizio/media_player.py | 65 +++++-------------- 4 files changed, 81 insertions(+), 50 deletions(-) create mode 100644 homeassistant/components/vizio/const.py diff --git a/homeassistant/components/vizio/__init__.py b/homeassistant/components/vizio/__init__.py index 3575f2cf648dd..222742e5eaec2 100644 --- a/homeassistant/components/vizio/__init__.py +++ b/homeassistant/components/vizio/__init__.py @@ -1 +1,51 @@ """The vizio component.""" +import voluptuous as vol + +from homeassistant.components.media_player import PLATFORM_SCHEMA +from homeassistant.const import ( + CONF_ACCESS_TOKEN, + CONF_DEVICE_CLASS, + CONF_HOST, + CONF_NAME, +) +from homeassistant.helpers import config_validation as cv + +from .const import ( + CONF_SUPPRESS_WARNING, + CONF_VOLUME_STEP, + DEFAULT_DEVICE_CLASS, + DEFAULT_NAME, + DEFAULT_VOLUME_STEP, +) + + +def validate_auth(config): + """Validate presence of CONF_ACCESS_TOKEN when CONF_DEVICE_CLASS=tv.""" + token = config.get(CONF_ACCESS_TOKEN) + if config[CONF_DEVICE_CLASS] == "tv" and (token is None or token == ""): + raise vol.Invalid( + "When '{}' is 'tv' then '{}' is required.".format( + CONF_DEVICE_CLASS, CONF_ACCESS_TOKEN + ), + path=[CONF_ACCESS_TOKEN], + ) + return config + + +PLATFORM_SCHEMA = vol.All( + PLATFORM_SCHEMA.extend( + { + vol.Required(CONF_HOST): cv.string, + vol.Optional(CONF_ACCESS_TOKEN): cv.string, + vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, + vol.Optional(CONF_SUPPRESS_WARNING, default=False): cv.boolean, + vol.Optional(CONF_DEVICE_CLASS, default=DEFAULT_DEVICE_CLASS): vol.All( + cv.string, vol.Lower, vol.In(["tv", "soundbar"]) + ), + vol.Optional(CONF_VOLUME_STEP, default=DEFAULT_VOLUME_STEP): vol.All( + vol.Coerce(int), vol.Range(min=1, max=10) + ), + } + ), + validate_auth, +) diff --git a/homeassistant/components/vizio/const.py b/homeassistant/components/vizio/const.py new file mode 100644 index 0000000000000..f668fb0795fa6 --- /dev/null +++ b/homeassistant/components/vizio/const.py @@ -0,0 +1,14 @@ +"""Constants used by vizio component.""" + +CONF_SUPPRESS_WARNING = "suppress_warning" +CONF_VOLUME_STEP = "volume_step" + +DEFAULT_NAME = "Vizio SmartCast" +DEFAULT_VOLUME_STEP = 1 +DEFAULT_DEVICE_CLASS = "tv" +DEVICE_ID = "pyvizio" +DEVICE_NAME = "Python Vizio" + +DOMAIN = "vizio" + +ICON = {"tv": "mdi:television", "soundbar": "mdi:speaker"} diff --git a/homeassistant/components/vizio/manifest.json b/homeassistant/components/vizio/manifest.json index f12d5d0c35823..25070462a82ca 100644 --- a/homeassistant/components/vizio/manifest.json +++ b/homeassistant/components/vizio/manifest.json @@ -3,7 +3,7 @@ "name": "Vizio", "documentation": "https://www.home-assistant.io/integrations/vizio", "requirements": [ - "pyvizio==0.0.9" + "pyvizio==0.0.11" ], "dependencies": [], "codeowners": ["@raman325"] diff --git a/homeassistant/components/vizio/media_player.py b/homeassistant/components/vizio/media_player.py index ac920a0533091..df0afb04a4d61 100644 --- a/homeassistant/components/vizio/media_player.py +++ b/homeassistant/components/vizio/media_player.py @@ -4,10 +4,9 @@ from pyvizio import Vizio from requests.packages import urllib3 -import voluptuous as vol from homeassistant import util -from homeassistant.components.media_player import PLATFORM_SCHEMA, MediaPlayerDevice +from homeassistant.components.media_player import MediaPlayerDevice from homeassistant.components.media_player.const import ( SUPPORT_NEXT_TRACK, SUPPORT_PREVIOUS_TRACK, @@ -26,20 +25,16 @@ STATE_OFF, STATE_ON, ) -from homeassistant.helpers import config_validation as cv -_LOGGER = logging.getLogger(__name__) - -CONF_SUPPRESS_WARNING = "suppress_warning" -CONF_VOLUME_STEP = "volume_step" - -DEFAULT_NAME = "Vizio SmartCast" -DEFAULT_VOLUME_STEP = 1 -DEFAULT_DEVICE_CLASS = "tv" -DEVICE_ID = "pyvizio" -DEVICE_NAME = "Python Vizio" +from .const import ( + CONF_SUPPRESS_WARNING, + CONF_VOLUME_STEP, + DEFAULT_NAME, + DEVICE_ID, + ICON, +) -ICON = "mdi:television" +_LOGGER = logging.getLogger(__name__) MIN_TIME_BETWEEN_FORCED_SCANS = timedelta(seconds=1) MIN_TIME_BETWEEN_SCANS = timedelta(seconds=10) @@ -59,36 +54,6 @@ } -def validate_auth(config): - """Validate presence of CONF_ACCESS_TOKEN when CONF_DEVICE_CLASS=tv.""" - token = config.get(CONF_ACCESS_TOKEN) - if config[CONF_DEVICE_CLASS] == "tv" and (token is None or token == ""): - raise vol.Invalid( - f"When '{CONF_DEVICE_CLASS}' is 'tv' then '{CONF_ACCESS_TOKEN}' is required.", - path=[CONF_ACCESS_TOKEN], - ) - return config - - -PLATFORM_SCHEMA = vol.All( - PLATFORM_SCHEMA.extend( - { - vol.Required(CONF_HOST): cv.string, - vol.Optional(CONF_ACCESS_TOKEN): cv.string, - vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, - vol.Optional(CONF_SUPPRESS_WARNING, default=False): cv.boolean, - vol.Optional(CONF_DEVICE_CLASS, default=DEFAULT_DEVICE_CLASS): vol.All( - cv.string, vol.Lower, vol.In(["tv", "soundbar"]) - ), - vol.Optional(CONF_VOLUME_STEP, default=DEFAULT_VOLUME_STEP): vol.All( - vol.Coerce(int), vol.Range(min=1, max=10) - ), - } - ), - validate_auth, -) - - def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Vizio media player platform.""" host = config[CONF_HOST] @@ -97,7 +62,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): volume_step = config[CONF_VOLUME_STEP] device_type = config[CONF_DEVICE_CLASS] device = VizioDevice(host, token, name, volume_step, device_type) - if device.validate_setup() is False: + if device._device.can_connect() is False: fail_auth_msg = "" if token is not None and token != "": fail_auth_msg = " and auth token is correct" @@ -134,6 +99,7 @@ def __init__(self, host, token, name, volume_step, device_type): self._device = Vizio(DEVICE_ID, host, DEFAULT_NAME, token, device_type) self._max_volume = float(self._device.get_max_volume()) self._unique_id = self._device.get_esn() + self._icon = ICON[device_type] @util.Throttle(MIN_TIME_BETWEEN_SCANS, MIN_TIME_BETWEEN_FORCED_SCANS) def update(self): @@ -175,6 +141,11 @@ def name(self): """Return the name of the device.""" return self._name + @property + def icon(self): + """Return the icon of the device.""" + return self._icon + @property def volume_level(self): """Return the volume level of the device.""" @@ -243,10 +214,6 @@ def volume_down(self): 0.0, self._volume_level - self._volume_step / self._max_volume ) - def validate_setup(self): - """Validate if host is available and auth token is correct.""" - return self._device.get_current_volume() is not None - def set_volume_level(self, volume): """Set volume level.""" if self._volume_level is not None: From bf91c013e21b3cedc5391074858d71e3a84f6f07 Mon Sep 17 00:00:00 2001 From: raman325 <7243222+raman325@users.noreply.github.com> Date: Mon, 6 Jan 2020 11:53:06 -0500 Subject: [PATCH 02/10] update requirements_all and make setup validation more pythonic --- homeassistant/components/vizio/media_player.py | 2 +- requirements_all.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/vizio/media_player.py b/homeassistant/components/vizio/media_player.py index df0afb04a4d61..6886742e7da78 100644 --- a/homeassistant/components/vizio/media_player.py +++ b/homeassistant/components/vizio/media_player.py @@ -62,7 +62,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): volume_step = config[CONF_VOLUME_STEP] device_type = config[CONF_DEVICE_CLASS] device = VizioDevice(host, token, name, volume_step, device_type) - if device._device.can_connect() is False: + if not device._device.can_connect(): fail_auth_msg = "" if token is not None and token != "": fail_auth_msg = " and auth token is correct" diff --git a/requirements_all.txt b/requirements_all.txt index 0990f5848cca2..a2a8f78411b51 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1693,7 +1693,7 @@ pyversasense==0.0.6 pyvesync==1.1.0 # homeassistant.components.vizio -pyvizio==0.0.9 +pyvizio==0.0.11 # homeassistant.components.velux pyvlx==0.2.12 From f411f778653e93ad36fb8197a66c8551a1f4ca4a Mon Sep 17 00:00:00 2001 From: raman325 <7243222+raman325@users.noreply.github.com> Date: Mon, 6 Jan 2020 11:59:04 -0500 Subject: [PATCH 03/10] mistake in refactor --- homeassistant/components/vizio/__init__.py | 42 +++++-------------- .../components/vizio/media_player.py | 20 ++++++++- 2 files changed, 30 insertions(+), 32 deletions(-) diff --git a/homeassistant/components/vizio/__init__.py b/homeassistant/components/vizio/__init__.py index 222742e5eaec2..9e77d82bb2969 100644 --- a/homeassistant/components/vizio/__init__.py +++ b/homeassistant/components/vizio/__init__.py @@ -1,7 +1,6 @@ """The vizio component.""" import voluptuous as vol -from homeassistant.components.media_player import PLATFORM_SCHEMA from homeassistant.const import ( CONF_ACCESS_TOKEN, CONF_DEVICE_CLASS, @@ -18,34 +17,15 @@ DEFAULT_VOLUME_STEP, ) - -def validate_auth(config): - """Validate presence of CONF_ACCESS_TOKEN when CONF_DEVICE_CLASS=tv.""" - token = config.get(CONF_ACCESS_TOKEN) - if config[CONF_DEVICE_CLASS] == "tv" and (token is None or token == ""): - raise vol.Invalid( - "When '{}' is 'tv' then '{}' is required.".format( - CONF_DEVICE_CLASS, CONF_ACCESS_TOKEN - ), - path=[CONF_ACCESS_TOKEN], - ) - return config - - -PLATFORM_SCHEMA = vol.All( - PLATFORM_SCHEMA.extend( - { - vol.Required(CONF_HOST): cv.string, - vol.Optional(CONF_ACCESS_TOKEN): cv.string, - vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, - vol.Optional(CONF_SUPPRESS_WARNING, default=False): cv.boolean, - vol.Optional(CONF_DEVICE_CLASS, default=DEFAULT_DEVICE_CLASS): vol.All( - cv.string, vol.Lower, vol.In(["tv", "soundbar"]) - ), - vol.Optional(CONF_VOLUME_STEP, default=DEFAULT_VOLUME_STEP): vol.All( - vol.Coerce(int), vol.Range(min=1, max=10) - ), - } +DATA_SCHEMA = { + vol.Required(CONF_HOST): cv.string, + vol.Optional(CONF_ACCESS_TOKEN): cv.string, + vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, + vol.Optional(CONF_SUPPRESS_WARNING, default=False): cv.boolean, + vol.Optional(CONF_DEVICE_CLASS, default=DEFAULT_DEVICE_CLASS): vol.All( + cv.string, vol.Lower, vol.In(["tv", "soundbar"]) ), - validate_auth, -) + vol.Optional(CONF_VOLUME_STEP, default=DEFAULT_VOLUME_STEP): vol.All( + vol.Coerce(int), vol.Range(min=1, max=10) + ), +} diff --git a/homeassistant/components/vizio/media_player.py b/homeassistant/components/vizio/media_player.py index 6886742e7da78..58856d71fb3bc 100644 --- a/homeassistant/components/vizio/media_player.py +++ b/homeassistant/components/vizio/media_player.py @@ -4,9 +4,10 @@ from pyvizio import Vizio from requests.packages import urllib3 +import voluptous as vol from homeassistant import util -from homeassistant.components.media_player import MediaPlayerDevice +from homeassistant.components.media_player import PLATFORM_SCHEMA, MediaPlayerDevice from homeassistant.components.media_player.const import ( SUPPORT_NEXT_TRACK, SUPPORT_PREVIOUS_TRACK, @@ -26,6 +27,7 @@ STATE_ON, ) +from . import DATA_SCHEMA from .const import ( CONF_SUPPRESS_WARNING, CONF_VOLUME_STEP, @@ -54,6 +56,22 @@ } +def validate_auth(config): + """Validate presence of CONF_ACCESS_TOKEN when CONF_DEVICE_CLASS=tv.""" + token = config.get(CONF_ACCESS_TOKEN) + if config[CONF_DEVICE_CLASS] == "tv" and (token is None or token == ""): + raise vol.Invalid( + "When '{}' is 'tv' then '{}' is required.".format( + CONF_DEVICE_CLASS, CONF_ACCESS_TOKEN + ), + path=[CONF_ACCESS_TOKEN], + ) + return config + + +PLATFORM_SCHEMA = vol.All(PLATFORM_SCHEMA.extend(DATA_SCHEMA), validate_auth) + + def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Vizio media player platform.""" host = config[CONF_HOST] From 61ede0f11fb094cd6fde386991e17b0cf12bd19d Mon Sep 17 00:00:00 2001 From: raman325 <7243222+raman325@users.noreply.github.com> Date: Mon, 6 Jan 2020 12:00:47 -0500 Subject: [PATCH 04/10] un-revert change from previous PR --- homeassistant/components/vizio/media_player.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/homeassistant/components/vizio/media_player.py b/homeassistant/components/vizio/media_player.py index 58856d71fb3bc..14a80dfbfad0f 100644 --- a/homeassistant/components/vizio/media_player.py +++ b/homeassistant/components/vizio/media_player.py @@ -61,9 +61,7 @@ def validate_auth(config): token = config.get(CONF_ACCESS_TOKEN) if config[CONF_DEVICE_CLASS] == "tv" and (token is None or token == ""): raise vol.Invalid( - "When '{}' is 'tv' then '{}' is required.".format( - CONF_DEVICE_CLASS, CONF_ACCESS_TOKEN - ), + f"When '{CONF_DEVICE_CLASS}' is 'tv' then '{CONF_ACCESS_TOKEN}' is required.", path=[CONF_ACCESS_TOKEN], ) return config From f85074e8a5bd8a8310e0281d5c73cb4e213ddfcb Mon Sep 17 00:00:00 2001 From: raman325 <7243222+raman325@users.noreply.github.com> Date: Mon, 6 Jan 2020 12:04:10 -0500 Subject: [PATCH 05/10] rename schema var --- homeassistant/components/vizio/__init__.py | 2 +- homeassistant/components/vizio/media_player.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/vizio/__init__.py b/homeassistant/components/vizio/__init__.py index 9e77d82bb2969..1bad675a7d49f 100644 --- a/homeassistant/components/vizio/__init__.py +++ b/homeassistant/components/vizio/__init__.py @@ -17,7 +17,7 @@ DEFAULT_VOLUME_STEP, ) -DATA_SCHEMA = { +VIZIO_SCHEMA = { vol.Required(CONF_HOST): cv.string, vol.Optional(CONF_ACCESS_TOKEN): cv.string, vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, diff --git a/homeassistant/components/vizio/media_player.py b/homeassistant/components/vizio/media_player.py index 14a80dfbfad0f..56756a5be8afd 100644 --- a/homeassistant/components/vizio/media_player.py +++ b/homeassistant/components/vizio/media_player.py @@ -27,7 +27,7 @@ STATE_ON, ) -from . import DATA_SCHEMA +from . import VIZIO_SCHEMA from .const import ( CONF_SUPPRESS_WARNING, CONF_VOLUME_STEP, @@ -67,7 +67,7 @@ def validate_auth(config): return config -PLATFORM_SCHEMA = vol.All(PLATFORM_SCHEMA.extend(DATA_SCHEMA), validate_auth) +PLATFORM_SCHEMA = vol.All(PLATFORM_SCHEMA.extend(VIZIO_SCHEMA), validate_auth) def setup_platform(hass, config, add_entities, discovery_info=None): From 0f730a298739850bcb9c1613104d2074bbcf64cb Mon Sep 17 00:00:00 2001 From: raman325 <7243222+raman325@users.noreply.github.com> Date: Mon, 6 Jan 2020 12:49:17 -0500 Subject: [PATCH 06/10] update .coveragerc, move validate_auth to __init__, only attempt to get ESN if device setup is validated --- .coveragerc | 2 +- homeassistant/components/vizio/__init__.py | 12 ++++++++++ .../components/vizio/media_player.py | 22 ++++++------------- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/.coveragerc b/.coveragerc index 4d4d962a9b38c..bf6be2965b8de 100644 --- a/.coveragerc +++ b/.coveragerc @@ -774,7 +774,7 @@ omit = homeassistant/components/viaggiatreno/sensor.py homeassistant/components/vicare/* homeassistant/components/vivotek/camera.py - homeassistant/components/vizio/media_player.py + homeassistant/components/vizio/* homeassistant/components/vlc/media_player.py homeassistant/components/vlc_telnet/media_player.py homeassistant/components/volkszaehler/sensor.py diff --git a/homeassistant/components/vizio/__init__.py b/homeassistant/components/vizio/__init__.py index 1bad675a7d49f..bb9b55ce75057 100644 --- a/homeassistant/components/vizio/__init__.py +++ b/homeassistant/components/vizio/__init__.py @@ -17,6 +17,18 @@ DEFAULT_VOLUME_STEP, ) + +def validate_auth(config): + """Validate presence of CONF_ACCESS_TOKEN when CONF_DEVICE_CLASS=tv.""" + token = config.get(CONF_ACCESS_TOKEN) + if config[CONF_DEVICE_CLASS] == "tv" and (token is None or token == ""): + raise vol.Invalid( + f"When '{CONF_DEVICE_CLASS}' is 'tv' then '{CONF_ACCESS_TOKEN}' is required.", + path=[CONF_ACCESS_TOKEN], + ) + return config + + VIZIO_SCHEMA = { vol.Required(CONF_HOST): cv.string, vol.Optional(CONF_ACCESS_TOKEN): cv.string, diff --git a/homeassistant/components/vizio/media_player.py b/homeassistant/components/vizio/media_player.py index 56756a5be8afd..611f8b1c16914 100644 --- a/homeassistant/components/vizio/media_player.py +++ b/homeassistant/components/vizio/media_player.py @@ -4,7 +4,7 @@ from pyvizio import Vizio from requests.packages import urllib3 -import voluptous as vol +import voluptuous as vol from homeassistant import util from homeassistant.components.media_player import PLATFORM_SCHEMA, MediaPlayerDevice @@ -27,7 +27,7 @@ STATE_ON, ) -from . import VIZIO_SCHEMA +from . import VIZIO_SCHEMA, validate_auth from .const import ( CONF_SUPPRESS_WARNING, CONF_VOLUME_STEP, @@ -56,18 +56,7 @@ } -def validate_auth(config): - """Validate presence of CONF_ACCESS_TOKEN when CONF_DEVICE_CLASS=tv.""" - token = config.get(CONF_ACCESS_TOKEN) - if config[CONF_DEVICE_CLASS] == "tv" and (token is None or token == ""): - raise vol.Invalid( - f"When '{CONF_DEVICE_CLASS}' is 'tv' then '{CONF_ACCESS_TOKEN}' is required.", - path=[CONF_ACCESS_TOKEN], - ) - return config - - -PLATFORM_SCHEMA = vol.All(PLATFORM_SCHEMA.extend(VIZIO_SCHEMA), validate_auth) +PLATFORM_SCHEMA = vol.All(PLATFORM_SCHEMA.extend(VIZIO_SCHEMA, validate_auth)) def setup_platform(hass, config, add_entities, discovery_info=None): @@ -114,7 +103,7 @@ def __init__(self, host, token, name, volume_step, device_type): self._supported_commands = SUPPORTED_COMMANDS[device_type] self._device = Vizio(DEVICE_ID, host, DEFAULT_NAME, token, device_type) self._max_volume = float(self._device.get_max_volume()) - self._unique_id = self._device.get_esn() + self._unique_id = None self._icon = ICON[device_type] @util.Throttle(MIN_TIME_BETWEEN_SCANS, MIN_TIME_BETWEEN_FORCED_SCANS) @@ -122,6 +111,9 @@ def update(self): """Retrieve latest state of the device.""" is_on = self._device.get_power_state() + if not self._unique_id: + self._unique_id = self._device.get_esn() + if is_on: self._state = STATE_ON From b9797d5fab8bb972d4994a81dfd2fb830d2014f8 Mon Sep 17 00:00:00 2001 From: raman325 <7243222+raman325@users.noreply.github.com> Date: Mon, 6 Jan 2020 12:56:49 -0500 Subject: [PATCH 07/10] reinstate validate_setup but change logic to use new connection test function --- homeassistant/components/vizio/media_player.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/vizio/media_player.py b/homeassistant/components/vizio/media_player.py index 611f8b1c16914..c52ff0b1c0428 100644 --- a/homeassistant/components/vizio/media_player.py +++ b/homeassistant/components/vizio/media_player.py @@ -67,7 +67,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): volume_step = config[CONF_VOLUME_STEP] device_type = config[CONF_DEVICE_CLASS] device = VizioDevice(host, token, name, volume_step, device_type) - if not device._device.can_connect(): + if not device.validate_setup(): fail_auth_msg = "" if token is not None and token != "": fail_auth_msg = " and auth token is correct" @@ -222,6 +222,10 @@ def volume_down(self): 0.0, self._volume_level - self._volume_step / self._max_volume ) + def validate_setup(self): + """Validate if host is available and auth token is correct.""" + return self._device.can_connect() + def set_volume_level(self, volume): """Set volume level.""" if self._volume_level is not None: From 5b728bdb7dedb9117d45b1af7e939acb7b67729f Mon Sep 17 00:00:00 2001 From: raman325 <7243222+raman325@users.noreply.github.com> Date: Mon, 6 Jan 2020 13:41:09 -0500 Subject: [PATCH 08/10] fix schema validation --- homeassistant/components/vizio/media_player.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/vizio/media_player.py b/homeassistant/components/vizio/media_player.py index c52ff0b1c0428..1a253a902f24a 100644 --- a/homeassistant/components/vizio/media_player.py +++ b/homeassistant/components/vizio/media_player.py @@ -56,7 +56,7 @@ } -PLATFORM_SCHEMA = vol.All(PLATFORM_SCHEMA.extend(VIZIO_SCHEMA, validate_auth)) +PLATFORM_SCHEMA = vol.All(PLATFORM_SCHEMA.extend(VIZIO_SCHEMA), validate_auth) def setup_platform(hass, config, add_entities, discovery_info=None): From 8aeafcb6ca59b85d26db1e1887be744044505689 Mon Sep 17 00:00:00 2001 From: raman325 <7243222+raman325@users.noreply.github.com> Date: Mon, 6 Jan 2020 13:50:09 -0500 Subject: [PATCH 09/10] simplify string empty check logic --- homeassistant/components/vizio/media_player.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/vizio/media_player.py b/homeassistant/components/vizio/media_player.py index 1a253a902f24a..35b54284c93d4 100644 --- a/homeassistant/components/vizio/media_player.py +++ b/homeassistant/components/vizio/media_player.py @@ -69,7 +69,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): device = VizioDevice(host, token, name, volume_step, device_type) if not device.validate_setup(): fail_auth_msg = "" - if token is not None and token != "": + if token: fail_auth_msg = " and auth token is correct" _LOGGER.error( "Failed to set up Vizio platform, please check if host " From d8bb1a6836bd87ab65868e8c2640e420a94c67f6 Mon Sep 17 00:00:00 2001 From: raman325 <7243222+raman325@users.noreply.github.com> Date: Mon, 6 Jan 2020 16:19:26 -0500 Subject: [PATCH 10/10] missed commit --- homeassistant/components/vizio/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/vizio/__init__.py b/homeassistant/components/vizio/__init__.py index bb9b55ce75057..00d34fc6591b4 100644 --- a/homeassistant/components/vizio/__init__.py +++ b/homeassistant/components/vizio/__init__.py @@ -21,7 +21,7 @@ def validate_auth(config): """Validate presence of CONF_ACCESS_TOKEN when CONF_DEVICE_CLASS=tv.""" token = config.get(CONF_ACCESS_TOKEN) - if config[CONF_DEVICE_CLASS] == "tv" and (token is None or token == ""): + if config[CONF_DEVICE_CLASS] == "tv" and not token: raise vol.Invalid( f"When '{CONF_DEVICE_CLASS}' is 'tv' then '{CONF_ACCESS_TOKEN}' is required.", path=[CONF_ACCESS_TOKEN],