From 3cf3d544ac647a054ac08e1368cee26e80b46da2 Mon Sep 17 00:00:00 2001 From: Ben Randall Date: Fri, 8 Dec 2017 22:43:33 -0800 Subject: [PATCH 1/7] Call update on Sesame devices to cache initial state --- homeassistant/components/lock/sesame.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/lock/sesame.py b/homeassistant/components/lock/sesame.py index 02b049618d207..d97fe6cc3ec67 100644 --- a/homeassistant/components/lock/sesame.py +++ b/homeassistant/components/lock/sesame.py @@ -33,8 +33,8 @@ def setup_platform(hass, config: ConfigType, email = config.get(CONF_EMAIL) password = config.get(CONF_PASSWORD) - add_devices([SesameDevice(sesame) for - sesame in pysesame.get_sesames(email, password)]) + add_devices([SesameDevice(sesame) for + sesame in pysesame.get_sesames(email, password)], true) class SesameDevice(LockDevice): From 81cc02567c2ea7d6be52c1ca859dfef9ef99b9bc Mon Sep 17 00:00:00 2001 From: Ben Randall Date: Fri, 8 Dec 2017 22:51:19 -0800 Subject: [PATCH 2/7] Switch to using async_add_devices --- homeassistant/components/lock/sesame.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/lock/sesame.py b/homeassistant/components/lock/sesame.py index d97fe6cc3ec67..b505f73e1051f 100644 --- a/homeassistant/components/lock/sesame.py +++ b/homeassistant/components/lock/sesame.py @@ -33,8 +33,9 @@ def setup_platform(hass, config: ConfigType, email = config.get(CONF_EMAIL) password = config.get(CONF_PASSWORD) - add_devices([SesameDevice(sesame) for - sesame in pysesame.get_sesames(email, password)], true) + async_add_devices( + [SesameDevice(sesame) for sesame in pysesame.get_sesames(email, password)], + update_before_add=true) class SesameDevice(LockDevice): From 417303fbd7d762cfa272066f265535912aaf99b8 Mon Sep 17 00:00:00 2001 From: Ben Randall Date: Fri, 8 Dec 2017 23:01:53 -0800 Subject: [PATCH 3/7] Fix line length --- homeassistant/components/lock/sesame.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/lock/sesame.py b/homeassistant/components/lock/sesame.py index b505f73e1051f..6fa5ebe8d8d60 100644 --- a/homeassistant/components/lock/sesame.py +++ b/homeassistant/components/lock/sesame.py @@ -33,9 +33,8 @@ def setup_platform(hass, config: ConfigType, email = config.get(CONF_EMAIL) password = config.get(CONF_PASSWORD) - async_add_devices( - [SesameDevice(sesame) for sesame in pysesame.get_sesames(email, password)], - update_before_add=true) + async_add_devices([SesameDevice(sesame) for sesame + in pysesame.get_sesames(email, password)], update_before_add=true) class SesameDevice(LockDevice): From e5d777119add5b72b76debb952d9e7a62db51885 Mon Sep 17 00:00:00 2001 From: Ben Randall Date: Sat, 9 Dec 2017 13:28:18 -0800 Subject: [PATCH 4/7] Fix Lint errors --- homeassistant/components/lock/sesame.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/lock/sesame.py b/homeassistant/components/lock/sesame.py index 6fa5ebe8d8d60..784ab09900955 100644 --- a/homeassistant/components/lock/sesame.py +++ b/homeassistant/components/lock/sesame.py @@ -25,16 +25,20 @@ # pylint: disable=unused-argument -def setup_platform(hass, config: ConfigType, - add_devices: Callable[[list], None], discovery_info=None): +@asyncio.coroutine +def async_setup_platform( + hass, config: ConfigType, + async_add_devices: Callable[[list], None], discovery_info=None): """Set up the Sesame platform.""" import pysesame email = config.get(CONF_EMAIL) password = config.get(CONF_PASSWORD) - async_add_devices([SesameDevice(sesame) for sesame - in pysesame.get_sesames(email, password)], update_before_add=true) + async_add_devices( + [SesameDevice(sesame) for sesame in + pysesame.get_sesames(email, password)], + update_before_add=True) class SesameDevice(LockDevice): From e8802de453d2c1221f4c7feac6273384ddcdb0df Mon Sep 17 00:00:00 2001 From: Ben Randall Date: Sat, 9 Dec 2017 14:26:06 -0800 Subject: [PATCH 5/7] Fix more Lint errors --- homeassistant/components/lock/sesame.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/lock/sesame.py b/homeassistant/components/lock/sesame.py index 784ab09900955..eb0b6769df2ae 100644 --- a/homeassistant/components/lock/sesame.py +++ b/homeassistant/components/lock/sesame.py @@ -4,6 +4,7 @@ For more details about this platform, please refer to the documentation https://home-assistant.io/components/lock.sesame/ """ +import asyncio from typing import Callable # noqa import voluptuous as vol @@ -36,8 +37,8 @@ def async_setup_platform( password = config.get(CONF_PASSWORD) async_add_devices( - [SesameDevice(sesame) for sesame in - pysesame.get_sesames(email, password)], + [SesameDevice(sesame) for sesame in + pysesame.get_sesames(email, password)], update_before_add=True) From a432ec1b1902e54c1b021583e2b842ecdf4f4bad Mon Sep 17 00:00:00 2001 From: Ben Randall Date: Sat, 16 Dec 2017 14:54:30 -0800 Subject: [PATCH 6/7] Cache pysesame properties --- homeassistant/components/lock/sesame.py | 37 +++++++++++++++---------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/homeassistant/components/lock/sesame.py b/homeassistant/components/lock/sesame.py index eb0b6769df2ae..ce948facbdde8 100644 --- a/homeassistant/components/lock/sesame.py +++ b/homeassistant/components/lock/sesame.py @@ -4,7 +4,6 @@ For more details about this platform, please refer to the documentation https://home-assistant.io/components/lock.sesame/ """ -import asyncio from typing import Callable # noqa import voluptuous as vol @@ -26,20 +25,18 @@ # pylint: disable=unused-argument -@asyncio.coroutine -def async_setup_platform( +def setup_platform( hass, config: ConfigType, - async_add_devices: Callable[[list], None], discovery_info=None): + add_devices: Callable[[list], None], discovery_info=None): """Set up the Sesame platform.""" import pysesame email = config.get(CONF_EMAIL) password = config.get(CONF_PASSWORD) - async_add_devices( - [SesameDevice(sesame) for sesame in - pysesame.get_sesames(email, password)], - update_before_add=True) + add_devices([SesameDevice(sesame) for sesame in + pysesame.get_sesames(email, password)], + update_before_add=True) class SesameDevice(LockDevice): @@ -47,6 +44,13 @@ class SesameDevice(LockDevice): _sesame = None + # Cached sesame properties + _device_id = None + _nickname = None + _is_unlocked = False + _api_enabled = False + _battery = -1 + def __init__(self, sesame: object) -> None: """Initialize the Sesame device.""" self._sesame = sesame @@ -54,22 +58,22 @@ def __init__(self, sesame: object) -> None: @property def name(self) -> str: """Return the name of the device.""" - return self._sesame.nickname + return self._nickname @property def available(self) -> bool: """Return True if entity is available.""" - return self._sesame.api_enabled + return self._api_enabled @property def is_locked(self) -> bool: """Return True if the device is currently locked, else False.""" - return not self._sesame.is_unlocked + return not self._is_unlocked @property def state(self) -> str: """Get the state of the device.""" - if self._sesame.is_unlocked: + if self._is_unlocked: return STATE_UNLOCKED return STATE_LOCKED @@ -84,11 +88,16 @@ def unlock(self, **kwargs) -> None: def update(self) -> None: """Update the internal state of the device.""" self._sesame.update_state() + self._nickname = self._sesame.nickname + self._api_enabled = self._sesame.api_enabled + self._is_unlocked = self._sesame.is_unlocked + self._device_id = self._sesame.device_id + self._battery = self._sesame.battery @property def device_state_attributes(self) -> dict: """Return the state attributes.""" attributes = {} - attributes[ATTR_DEVICE_ID] = self._sesame.device_id - attributes[ATTR_BATTERY_LEVEL] = self._sesame.battery + attributes[ATTR_DEVICE_ID] = self._device_id + attributes[ATTR_BATTERY_LEVEL] = self._battery return attributes From fa3876b4ed245fe88e41b19cf5a9444c34ab93be Mon Sep 17 00:00:00 2001 From: Ben Randall Date: Sun, 17 Dec 2017 21:23:35 -0800 Subject: [PATCH 7/7] Updates from CR feedback --- homeassistant/components/lock/sesame.py | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/homeassistant/components/lock/sesame.py b/homeassistant/components/lock/sesame.py index ce948facbdde8..5bc404354860f 100644 --- a/homeassistant/components/lock/sesame.py +++ b/homeassistant/components/lock/sesame.py @@ -42,19 +42,17 @@ def setup_platform( class SesameDevice(LockDevice): """Representation of a Sesame device.""" - _sesame = None - - # Cached sesame properties - _device_id = None - _nickname = None - _is_unlocked = False - _api_enabled = False - _battery = -1 - def __init__(self, sesame: object) -> None: """Initialize the Sesame device.""" self._sesame = sesame + # Cached properties from pysesame object. + self._device_id = None + self._nickname = None + self._is_unlocked = False + self._api_enabled = False + self._battery = -1 + @property def name(self) -> str: """Return the name of the device."""