From e4931e242a8ed4f7d5f5a74df49f355b88c1b01c Mon Sep 17 00:00:00 2001 From: jugla <59493499+jugla@users.noreply.github.com> Date: Sun, 21 Nov 2021 23:38:37 +0100 Subject: [PATCH] Allow atome reauthentication on error (#59452) * allow reauthentification on error * Allow reauthentification on error * allow reauthentification on error * allow reauthentification on error * Set one fonction for day/month/week/year and allow retry on error * allow retry and manage return status * local variable in retrieve_period_usage_with_retry * Use If statement rather than exception * remove blank * code format * Reduce variable * remove useless variable * get method return false and pylint no else-return * remove blank * trailing white space --- homeassistant/components/atome/sensor.py | 102 ++++++++++++++--------- 1 file changed, 63 insertions(+), 39 deletions(-) diff --git a/homeassistant/components/atome/sensor.py b/homeassistant/components/atome/sensor.py index 59d193ec8e2..0402e80949e 100644 --- a/homeassistant/components/atome/sensor.py +++ b/homeassistant/components/atome/sensor.py @@ -111,11 +111,13 @@ class AtomeData: """Return latest active power value.""" return self._is_connected - @Throttle(LIVE_SCAN_INTERVAL) - def update_live_usage(self): - """Return current power value.""" - try: - values = self.atome_client.get_live() + def _retrieve_live(self): + values = self.atome_client.get_live() + if ( + values.get("last") + and values.get("subscribed") + and (values.get("isConnected") is not None) + ): self._live_power = values["last"] self._subscribed_power = values["subscribed"] self._is_connected = values["isConnected"] @@ -125,9 +127,47 @@ class AtomeData: self._is_connected, self._subscribed_power, ) + return True - except KeyError as error: - _LOGGER.error("Missing last value in values: %s: %s", values, error) + _LOGGER.error("Live Data : Missing last value in values: %s", values) + return False + + @Throttle(LIVE_SCAN_INTERVAL) + def update_live_usage(self): + """Return current power value.""" + if not self._retrieve_live(): + _LOGGER.debug("Perform Reconnect during live request") + self.atome_client.login() + self._retrieve_live() + + def _retrieve_period_usage(self, period_type): + """Return current daily/weekly/monthly/yearly power usage.""" + values = self.atome_client.get_consumption(period_type) + if values.get("total") and values.get("price"): + period_usage = values["total"] / 1000 + period_price = values["price"] + _LOGGER.debug("Updating Atome %s data. Got: %d", period_type, period_usage) + return True, period_usage, period_price + + _LOGGER.error("%s : Missing last value in values: %s", period_type, values) + return False, None, None + + def _retrieve_period_usage_with_retry(self, period_type): + """Return current daily/weekly/monthly/yearly power usage with one retry.""" + ( + retrieve_success, + period_usage, + period_price, + ) = self._retrieve_period_usage(period_type) + if not retrieve_success: + _LOGGER.debug("Perform Reconnect during %s", period_type) + self.atome_client.login() + ( + retrieve_success, + period_usage, + period_price, + ) = self._retrieve_period_usage(period_type) + return (period_usage, period_price) @property def day_usage(self): @@ -142,14 +182,10 @@ class AtomeData: @Throttle(DAILY_SCAN_INTERVAL) def update_day_usage(self): """Return current daily power usage.""" - try: - values = self.atome_client.get_consumption(DAILY_TYPE) - self._day_usage = values["total"] / 1000 - self._day_price = values["price"] - _LOGGER.debug("Updating Atome daily data. Got: %d", self._day_usage) - - except KeyError as error: - _LOGGER.error("Missing last value in values: %s: %s", values, error) + ( + self._day_usage, + self._day_price, + ) = self._retrieve_period_usage_with_retry(DAILY_TYPE) @property def week_usage(self): @@ -164,14 +200,10 @@ class AtomeData: @Throttle(WEEKLY_SCAN_INTERVAL) def update_week_usage(self): """Return current weekly power usage.""" - try: - values = self.atome_client.get_consumption(WEEKLY_TYPE) - self._week_usage = values["total"] / 1000 - self._week_price = values["price"] - _LOGGER.debug("Updating Atome weekly data. Got: %d", self._week_usage) - - except KeyError as error: - _LOGGER.error("Missing last value in values: %s: %s", values, error) + ( + self._week_usage, + self._week_price, + ) = self._retrieve_period_usage_with_retry(WEEKLY_TYPE) @property def month_usage(self): @@ -186,14 +218,10 @@ class AtomeData: @Throttle(MONTHLY_SCAN_INTERVAL) def update_month_usage(self): """Return current monthly power usage.""" - try: - values = self.atome_client.get_consumption(MONTHLY_TYPE) - self._month_usage = values["total"] / 1000 - self._month_price = values["price"] - _LOGGER.debug("Updating Atome monthly data. Got: %d", self._month_usage) - - except KeyError as error: - _LOGGER.error("Missing last value in values: %s: %s", values, error) + ( + self._month_usage, + self._month_price, + ) = self._retrieve_period_usage_with_retry(MONTHLY_TYPE) @property def year_usage(self): @@ -208,14 +236,10 @@ class AtomeData: @Throttle(YEARLY_SCAN_INTERVAL) def update_year_usage(self): """Return current yearly power usage.""" - try: - values = self.atome_client.get_consumption(YEARLY_TYPE) - self._year_usage = values["total"] / 1000 - self._year_price = values["price"] - _LOGGER.debug("Updating Atome yearly data. Got: %d", self._year_usage) - - except KeyError as error: - _LOGGER.error("Missing last value in values: %s: %s", values, error) + ( + self._year_usage, + self._year_price, + ) = self._retrieve_period_usage_with_retry(YEARLY_TYPE) class AtomeSensor(SensorEntity): -- GitLab