From fcd92f6d7d38aa27b4a7ba8060e80ba9c5780069 Mon Sep 17 00:00:00 2001 From: Ryan McLean Date: Mon, 13 Nov 2017 22:40:04 +0000 Subject: [PATCH 01/13] Fix for sensor no ssl --- homeassistant/components/sensor/plex.py | 46 ++++++++++++++++++------- 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/homeassistant/components/sensor/plex.py b/homeassistant/components/sensor/plex.py index 0a75d0395ec2dc..b7e5a9217d8b62 100644 --- a/homeassistant/components/sensor/plex.py +++ b/homeassistant/components/sensor/plex.py @@ -6,11 +6,13 @@ """ from datetime import timedelta import logging + +import requests import voluptuous as vol from homeassistant.components.switch import PLATFORM_SCHEMA from homeassistant.const import ( - CONF_NAME, CONF_USERNAME, CONF_PASSWORD, CONF_HOST, CONF_PORT, CONF_TOKEN) + CONF_NAME, CONF_USERNAME, CONF_PASSWORD, CONF_HOST, CONF_PORT, CONF_TOKEN, CONF_SSL, CONF_VERIFY_SSL) from homeassistant.helpers.entity import Entity from homeassistant.util import Throttle import homeassistant.helpers.config_validation as cv @@ -32,6 +34,8 @@ vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, vol.Optional(CONF_PASSWORD): cv.string, vol.Optional(CONF_TOKEN): cv.string, + vol.Optional(CONF_SSL, default=False): cv.boolean, + vol.Optional(CONF_VERIFY_SSL, default=True): cv.boolean, vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port, vol.Optional(CONF_SERVER): cv.string, vol.Optional(CONF_USERNAME): cv.string, @@ -48,34 +52,52 @@ def setup_platform(hass, config, add_devices, discovery_info=None): plex_host = config.get(CONF_HOST) plex_port = config.get(CONF_PORT) plex_token = config.get(CONF_TOKEN) - plex_url = 'http://{}:{}'.format(plex_host, plex_port) + plex_ssl = config.get(CONF_SSL) + plex_verify_ssl = config.get(CONF_VERIFY_SSL) + + http_prefix = 'https' if plex_ssl else 'http' + plex_url = '{}://{}:{}'.format(http_prefix, plex_host, plex_port) add_devices([PlexSensor( name, plex_url, plex_user, plex_password, plex_server, - plex_token)], True) + plex_token, plex_ssl, plex_verify_ssl)], True) class PlexSensor(Entity): """Representation of a Plex now playing sensor.""" def __init__(self, name, plex_url, plex_user, plex_password, - plex_server, plex_token): + plex_server, plex_token, plex_ssl, plex_verify_ssl): """Initialize the sensor.""" from plexapi.myplex import MyPlexAccount from plexapi.server import PlexServer + import plexapi.exceptions + + cert_session = None + if plex_ssl and (plex_verify_ssl is False): + _LOGGER.info("Ignoring SSL verification") + cert_session = requests.Session() + cert_session.verify = False self._name = name self._state = 0 self._now_playing = [] - if plex_token: - self._server = PlexServer(plex_url, plex_token) - elif plex_user and plex_password: - user = MyPlexAccount(plex_user, plex_password) - server = plex_server if plex_server else user.resources()[0].name - self._server = user.resource(server).connect() - else: - self._server = PlexServer(plex_url) + try: + if plex_token: + self._server = PlexServer(plex_url, plex_token, cert_session) + elif plex_user and plex_password: + user = MyPlexAccount(plex_user, plex_password) + server = plex_server if plex_server else user.resources()[0].name + self._server = user.resource(server).connect() + else: + self._server = PlexServer(plex_url) + + _LOGGER.info("Plex Sensor Configuration done") + except (plexapi.exceptions.BadRequest, plexapi.exceptions.Unauthorized, + plexapi.exceptions.NotFound) as error: + _LOGGER.info(error) + return @property def name(self): From 00f468d9a700f49c473a09eb82f6179bd278c7b7 Mon Sep 17 00:00:00 2001 From: Ryan McLean Date: Sun, 10 Dec 2017 21:02:56 +0000 Subject: [PATCH 02/13] Line length Fixes --- homeassistant/components/sensor/plex.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/sensor/plex.py b/homeassistant/components/sensor/plex.py index b7e5a9217d8b62..2fd15cd06fa6c4 100644 --- a/homeassistant/components/sensor/plex.py +++ b/homeassistant/components/sensor/plex.py @@ -6,13 +6,13 @@ """ from datetime import timedelta import logging - import requests import voluptuous as vol from homeassistant.components.switch import PLATFORM_SCHEMA from homeassistant.const import ( - CONF_NAME, CONF_USERNAME, CONF_PASSWORD, CONF_HOST, CONF_PORT, CONF_TOKEN, CONF_SSL, CONF_VERIFY_SSL) + CONF_NAME, CONF_USERNAME, CONF_PASSWORD, CONF_HOST, CONF_PORT, CONF_TOKEN, + CONF_SSL, CONF_VERIFY_SSL) from homeassistant.helpers.entity import Entity from homeassistant.util import Throttle import homeassistant.helpers.config_validation as cv @@ -88,7 +88,8 @@ def __init__(self, name, plex_url, plex_user, plex_password, self._server = PlexServer(plex_url, plex_token, cert_session) elif plex_user and plex_password: user = MyPlexAccount(plex_user, plex_password) - server = plex_server if plex_server else user.resources()[0].name + server = plex_server if plex_server \ + else user.resources()[0].name self._server = user.resource(server).connect() else: self._server = PlexServer(plex_url) From 032c5277f5c82cc3406874a0525521b013303ba9 Mon Sep 17 00:00:00 2001 From: Ryan McLean Date: Sun, 10 Dec 2017 23:00:06 +0000 Subject: [PATCH 03/13] Removed unneeded schema extensions --- homeassistant/components/sensor/plex.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/homeassistant/components/sensor/plex.py b/homeassistant/components/sensor/plex.py index 2fd15cd06fa6c4..c08de80d167ad8 100644 --- a/homeassistant/components/sensor/plex.py +++ b/homeassistant/components/sensor/plex.py @@ -34,8 +34,6 @@ vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, vol.Optional(CONF_PASSWORD): cv.string, vol.Optional(CONF_TOKEN): cv.string, - vol.Optional(CONF_SSL, default=False): cv.boolean, - vol.Optional(CONF_VERIFY_SSL, default=True): cv.boolean, vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port, vol.Optional(CONF_SERVER): cv.string, vol.Optional(CONF_USERNAME): cv.string, From 19f1d85a4a2355740fe6eb3056a36e5c577fa03b Mon Sep 17 00:00:00 2001 From: Ryan McLean Date: Mon, 11 Dec 2017 00:03:26 +0000 Subject: [PATCH 04/13] Removed unrequired variable --- homeassistant/components/sensor/plex.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/sensor/plex.py b/homeassistant/components/sensor/plex.py index c08de80d167ad8..dedda8bf13516f 100644 --- a/homeassistant/components/sensor/plex.py +++ b/homeassistant/components/sensor/plex.py @@ -53,8 +53,8 @@ def setup_platform(hass, config, add_devices, discovery_info=None): plex_ssl = config.get(CONF_SSL) plex_verify_ssl = config.get(CONF_VERIFY_SSL) - http_prefix = 'https' if plex_ssl else 'http' - plex_url = '{}://{}:{}'.format(http_prefix, plex_host, plex_port) + plex_url = '{}://{}:{}'.format('https' if plex_ssl else 'http', + plex_host, plex_port) add_devices([PlexSensor( name, plex_url, plex_user, plex_password, plex_server, From 17bbe0ec0f6b3bcfcdfde93d3a9295642a56834e Mon Sep 17 00:00:00 2001 From: Ryan McLean Date: Thu, 14 Dec 2017 10:30:54 +0000 Subject: [PATCH 05/13] Added defaults for SSL & SSL Verify --- homeassistant/components/sensor/plex.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/homeassistant/components/sensor/plex.py b/homeassistant/components/sensor/plex.py index dedda8bf13516f..d3411421183c9c 100644 --- a/homeassistant/components/sensor/plex.py +++ b/homeassistant/components/sensor/plex.py @@ -37,6 +37,8 @@ vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port, vol.Optional(CONF_SERVER): cv.string, vol.Optional(CONF_USERNAME): cv.string, + vol.Optional(CONF_SSL, default=False): cv.boolean, + vol.Optional(CONF_VERIFY_SSL, default=True): cv.boolean, }) From 1905579d938a264102b492ebb27fce3a457db436 Mon Sep 17 00:00:00 2001 From: Ryan McLean Date: Thu, 14 Dec 2017 10:34:57 +0000 Subject: [PATCH 06/13] Moved Defaults to Variables Corrected SSL Defaults to match the other Defaults style --- homeassistant/components/sensor/plex.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/sensor/plex.py b/homeassistant/components/sensor/plex.py index d3411421183c9c..5504f04578bf56 100644 --- a/homeassistant/components/sensor/plex.py +++ b/homeassistant/components/sensor/plex.py @@ -26,6 +26,8 @@ DEFAULT_HOST = 'localhost' DEFAULT_NAME = 'Plex' DEFAULT_PORT = 32400 +DEFAULT_SSL = False +DEFAULT_SSL_VERIFY = True MIN_TIME_BETWEEN_UPDATES = timedelta(minutes=1) @@ -37,8 +39,8 @@ vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port, vol.Optional(CONF_SERVER): cv.string, vol.Optional(CONF_USERNAME): cv.string, - vol.Optional(CONF_SSL, default=False): cv.boolean, - vol.Optional(CONF_VERIFY_SSL, default=True): cv.boolean, + vol.Optional(CONF_SSL, default=DEFAULT_SSL): cv.boolean, + vol.Optional(CONF_VERIFY_SSL, default=DEFAULT_SSL_VERIFY): cv.boolean, }) From 3c1ffb6880e41d347c79fc8d569188efd502f1e2 Mon Sep 17 00:00:00 2001 From: Ryan McLean Date: Thu, 14 Dec 2017 10:35:45 +0000 Subject: [PATCH 07/13] Fixed Typo --- homeassistant/components/sensor/plex.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/sensor/plex.py b/homeassistant/components/sensor/plex.py index 5504f04578bf56..50c7aab27faefa 100644 --- a/homeassistant/components/sensor/plex.py +++ b/homeassistant/components/sensor/plex.py @@ -27,7 +27,7 @@ DEFAULT_NAME = 'Plex' DEFAULT_PORT = 32400 DEFAULT_SSL = False -DEFAULT_SSL_VERIFY = True +DEFAULT_VERIFY_SSL = True MIN_TIME_BETWEEN_UPDATES = timedelta(minutes=1) @@ -40,7 +40,7 @@ vol.Optional(CONF_SERVER): cv.string, vol.Optional(CONF_USERNAME): cv.string, vol.Optional(CONF_SSL, default=DEFAULT_SSL): cv.boolean, - vol.Optional(CONF_VERIFY_SSL, default=DEFAULT_SSL_VERIFY): cv.boolean, + vol.Optional(CONF_VERIFY_SSL, default=DEFAULT_VERIFY_SSL): cv.boolean, }) From 2cfa728a3be12aca26a409102635d4a01fbe471e Mon Sep 17 00:00:00 2001 From: Ryan McLean Date: Mon, 18 Dec 2017 00:27:49 +0000 Subject: [PATCH 08/13] Removed option to disable verify ssl --- homeassistant/components/sensor/plex.py | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/homeassistant/components/sensor/plex.py b/homeassistant/components/sensor/plex.py index d3411421183c9c..829e1ce33ef739 100644 --- a/homeassistant/components/sensor/plex.py +++ b/homeassistant/components/sensor/plex.py @@ -38,7 +38,6 @@ vol.Optional(CONF_SERVER): cv.string, vol.Optional(CONF_USERNAME): cv.string, vol.Optional(CONF_SSL, default=False): cv.boolean, - vol.Optional(CONF_VERIFY_SSL, default=True): cv.boolean, }) @@ -52,32 +51,26 @@ def setup_platform(hass, config, add_devices, discovery_info=None): plex_host = config.get(CONF_HOST) plex_port = config.get(CONF_PORT) plex_token = config.get(CONF_TOKEN) - plex_ssl = config.get(CONF_SSL) - plex_verify_ssl = config.get(CONF_VERIFY_SSL) - plex_url = '{}://{}:{}'.format('https' if plex_ssl else 'http', + plex_url = '{}://{}:{}'.format('https' if config.get(CONF_SSL) else 'http', plex_host, plex_port) add_devices([PlexSensor( name, plex_url, plex_user, plex_password, plex_server, - plex_token, plex_ssl, plex_verify_ssl)], True) + plex_token)], True) class PlexSensor(Entity): """Representation of a Plex now playing sensor.""" def __init__(self, name, plex_url, plex_user, plex_password, - plex_server, plex_token, plex_ssl, plex_verify_ssl): + plex_server, plex_token): """Initialize the sensor.""" from plexapi.myplex import MyPlexAccount from plexapi.server import PlexServer import plexapi.exceptions cert_session = None - if plex_ssl and (plex_verify_ssl is False): - _LOGGER.info("Ignoring SSL verification") - cert_session = requests.Session() - cert_session.verify = False self._name = name self._state = 0 From 92bfd05217c3918ff97e00d67a04ed47b24ba7ac Mon Sep 17 00:00:00 2001 From: Ryan McLean Date: Mon, 18 Dec 2017 00:32:06 +0000 Subject: [PATCH 09/13] Removed unused import --- homeassistant/components/sensor/plex.py | 1 - 1 file changed, 1 deletion(-) diff --git a/homeassistant/components/sensor/plex.py b/homeassistant/components/sensor/plex.py index 92334d16c10156..16eff69d8c294c 100644 --- a/homeassistant/components/sensor/plex.py +++ b/homeassistant/components/sensor/plex.py @@ -6,7 +6,6 @@ """ from datetime import timedelta import logging -import requests import voluptuous as vol from homeassistant.components.switch import PLATFORM_SCHEMA From f6bbf2cc9cdb99eabd23ff496aba003154000668 Mon Sep 17 00:00:00 2001 From: Ryan McLean Date: Mon, 18 Dec 2017 01:16:11 +0000 Subject: [PATCH 10/13] Removed unused CONST --- homeassistant/components/sensor/plex.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/sensor/plex.py b/homeassistant/components/sensor/plex.py index 16eff69d8c294c..02a1bd0030f84b 100644 --- a/homeassistant/components/sensor/plex.py +++ b/homeassistant/components/sensor/plex.py @@ -11,7 +11,7 @@ from homeassistant.components.switch import PLATFORM_SCHEMA from homeassistant.const import ( CONF_NAME, CONF_USERNAME, CONF_PASSWORD, CONF_HOST, CONF_PORT, CONF_TOKEN, - CONF_SSL, CONF_VERIFY_SSL) + CONF_SSL) from homeassistant.helpers.entity import Entity from homeassistant.util import Throttle import homeassistant.helpers.config_validation as cv From c28ac782a28860c20164f736227274c274e76d43 Mon Sep 17 00:00:00 2001 From: Ryan McLean Date: Mon, 18 Dec 2017 01:58:08 +0000 Subject: [PATCH 11/13] Fixed error handling --- homeassistant/components/sensor/plex.py | 40 ++++++++++++------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/homeassistant/components/sensor/plex.py b/homeassistant/components/sensor/plex.py index 02a1bd0030f84b..0464d51ee7a8e9 100644 --- a/homeassistant/components/sensor/plex.py +++ b/homeassistant/components/sensor/plex.py @@ -55,10 +55,16 @@ def setup_platform(hass, config, add_devices, discovery_info=None): plex_url = '{}://{}:{}'.format('https' if config.get(CONF_SSL) else 'http', plex_host, plex_port) - add_devices([PlexSensor( - name, plex_url, plex_user, plex_password, plex_server, - plex_token)], True) + import plexapi.exceptions + try: + add_devices([PlexSensor( + name, plex_url, plex_user, plex_password, plex_server, + plex_token)], True) + except (plexapi.exceptions.BadRequest, plexapi.exceptions.Unauthorized, + plexapi.exceptions.NotFound) as error: + _LOGGER.error(error) + return class PlexSensor(Entity): """Representation of a Plex now playing sensor.""" @@ -68,7 +74,6 @@ def __init__(self, name, plex_url, plex_user, plex_password, """Initialize the sensor.""" from plexapi.myplex import MyPlexAccount from plexapi.server import PlexServer - import plexapi.exceptions cert_session = None @@ -76,22 +81,17 @@ def __init__(self, name, plex_url, plex_user, plex_password, self._state = 0 self._now_playing = [] - try: - if plex_token: - self._server = PlexServer(plex_url, plex_token, cert_session) - elif plex_user and plex_password: - user = MyPlexAccount(plex_user, plex_password) - server = plex_server if plex_server \ - else user.resources()[0].name - self._server = user.resource(server).connect() - else: - self._server = PlexServer(plex_url) - - _LOGGER.info("Plex Sensor Configuration done") - except (plexapi.exceptions.BadRequest, plexapi.exceptions.Unauthorized, - plexapi.exceptions.NotFound) as error: - _LOGGER.info(error) - return + if plex_token: + self._server = PlexServer(plex_url, plex_token, cert_session) + elif plex_user and plex_password: + user = MyPlexAccount(plex_user, plex_password) + server = plex_server if plex_server \ + else user.resources()[0].name + self._server = user.resource(server).connect() + else: + self._server = PlexServer(plex_url) + + _LOGGER.info("Plex Sensor Configuration done") @property def name(self): From bf87edbb6b605fd980aeb8aaedbe5b485395641c Mon Sep 17 00:00:00 2001 From: Ryan McLean Date: Mon, 18 Dec 2017 10:28:46 +0000 Subject: [PATCH 12/13] Cleanup of unneeded vars & logging --- homeassistant/components/sensor/plex.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/homeassistant/components/sensor/plex.py b/homeassistant/components/sensor/plex.py index 0464d51ee7a8e9..2d93fa6083e6e4 100644 --- a/homeassistant/components/sensor/plex.py +++ b/homeassistant/components/sensor/plex.py @@ -66,6 +66,7 @@ def setup_platform(hass, config, add_devices, discovery_info=None): _LOGGER.error(error) return + class PlexSensor(Entity): """Representation of a Plex now playing sensor.""" @@ -75,23 +76,19 @@ def __init__(self, name, plex_url, plex_user, plex_password, from plexapi.myplex import MyPlexAccount from plexapi.server import PlexServer - cert_session = None - self._name = name self._state = 0 self._now_playing = [] if plex_token: - self._server = PlexServer(plex_url, plex_token, cert_session) + self._server = PlexServer(plex_url, plex_token) elif plex_user and plex_password: user = MyPlexAccount(plex_user, plex_password) - server = plex_server if plex_server \ - else user.resources()[0].name + server = plex_server if plex_server else user.resources()[0].name self._server = user.resource(server).connect() else: self._server = PlexServer(plex_url) - _LOGGER.info("Plex Sensor Configuration done") @property def name(self): From 11079a2cc5d60271a091232104db6b80b04fa31c Mon Sep 17 00:00:00 2001 From: Ryan McLean Date: Mon, 18 Dec 2017 11:12:30 +0000 Subject: [PATCH 13/13] Fix for linting --- homeassistant/components/sensor/plex.py | 1 - 1 file changed, 1 deletion(-) diff --git a/homeassistant/components/sensor/plex.py b/homeassistant/components/sensor/plex.py index 2d93fa6083e6e4..a40aeee55e5b03 100644 --- a/homeassistant/components/sensor/plex.py +++ b/homeassistant/components/sensor/plex.py @@ -89,7 +89,6 @@ def __init__(self, name, plex_url, plex_user, plex_password, else: self._server = PlexServer(plex_url) - @property def name(self): """Return the name of the sensor."""