From 0eb8daee23fc31325288e012b250509b45219d56 Mon Sep 17 00:00:00 2001 From: mkmer Date: Sun, 19 Nov 2023 04:41:17 -0500 Subject: [PATCH] Refactor async_update in Honeywell (#103069) * Refactor async_update * remove ignore-import * Restore somecomforterror rather than autherror * Update climate.py Limit exceptions in async_update() * Update climate.py Ruff it * Update climate.py Ruff * Refactor to login routine * Add back avialable change * Address extra logic in try * Address expected returns with logic move --- homeassistant/components/honeywell/climate.py | 40 ++++++++++++------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/homeassistant/components/honeywell/climate.py b/homeassistant/components/honeywell/climate.py index e9af4b2fd95..2c1c70d01eb 100644 --- a/homeassistant/components/honeywell/climate.py +++ b/homeassistant/components/honeywell/climate.py @@ -6,7 +6,12 @@ import datetime from typing import Any from aiohttp import ClientConnectionError -from aiosomecomfort import SomeComfortError, UnauthorizedError, UnexpectedResponse +from aiosomecomfort import ( + AuthError, + SomeComfortError, + UnauthorizedError, + UnexpectedResponse, +) from aiosomecomfort.device import Device as SomeComfortDevice from homeassistant.components.climate import ( @@ -492,31 +497,38 @@ class HoneywellUSThermostat(ClimateEntity): async def async_update(self) -> None: """Get the latest state from the service.""" - try: - await self._device.refresh() - self._attr_available = True - self._retry = 0 - except UnauthorizedError: + async def _login() -> None: try: await self._data.client.login() await self._device.refresh() - self._attr_available = True - self._retry = 0 except ( - SomeComfortError, + AuthError, ClientConnectionError, asyncio.TimeoutError, ): self._retry += 1 - if self._retry > RETRY: - self._attr_available = False + self._attr_available = self._retry <= RETRY + return + + self._attr_available = True + self._retry = 0 + + try: + await self._device.refresh() + + except UnauthorizedError: + await _login() + return except (ClientConnectionError, asyncio.TimeoutError): self._retry += 1 - if self._retry > RETRY: - self._attr_available = False + self._attr_available = self._retry <= RETRY + return except UnexpectedResponse: - pass + return + + self._attr_available = True + self._retry = 0