From 71d985e4d664b2e3234344b29b2fb6a3f5f015de Mon Sep 17 00:00:00 2001 From: Marc Mueller <30130371+cdce8p@users.noreply.github.com> Date: Tue, 15 Aug 2023 14:32:15 +0200 Subject: [PATCH] Use asyncio.timeout [i-n] (#98450) --- homeassistant/components/ialarm/__init__.py | 5 ++--- homeassistant/components/iammeter/sensor.py | 5 ++--- homeassistant/components/image/__init__.py | 3 +-- homeassistant/components/imap/coordinator.py | 3 +-- homeassistant/components/intellifire/coordinator.py | 4 ++-- homeassistant/components/ipma/__init__.py | 3 +-- homeassistant/components/ipma/sensor.py | 4 ++-- homeassistant/components/ipma/weather.py | 5 ++--- homeassistant/components/isy994/__init__.py | 3 +-- homeassistant/components/isy994/config_flow.py | 4 ++-- homeassistant/components/izone/config_flow.py | 4 +--- homeassistant/components/kaiterra/api_data.py | 3 +-- homeassistant/components/kmtronic/__init__.py | 4 ++-- homeassistant/components/kraken/__init__.py | 3 +-- .../components/landisgyr_heat_meter/config_flow.py | 3 +-- .../components/landisgyr_heat_meter/coordinator.py | 4 ++-- homeassistant/components/laundrify/coordinator.py | 4 ++-- homeassistant/components/led_ble/__init__.py | 3 +-- homeassistant/components/lifx_cloud/scene.py | 5 ++--- homeassistant/components/logi_circle/__init__.py | 3 +-- homeassistant/components/logi_circle/config_flow.py | 3 +-- homeassistant/components/london_underground/sensor.py | 4 ++-- homeassistant/components/loqed/coordinator.py | 4 ++-- homeassistant/components/lutron_caseta/__init__.py | 3 +-- homeassistant/components/lutron_caseta/config_flow.py | 3 +-- homeassistant/components/lyric/__init__.py | 4 ++-- homeassistant/components/mailbox/__init__.py | 3 +-- homeassistant/components/matter/__init__.py | 5 ++--- homeassistant/components/mazda/__init__.py | 4 ++-- homeassistant/components/meater/__init__.py | 4 ++-- homeassistant/components/media_player/__init__.py | 3 +-- homeassistant/components/melcloud/__init__.py | 3 +-- homeassistant/components/melcloud/config_flow.py | 3 +-- homeassistant/components/microsoft_face/__init__.py | 3 +-- homeassistant/components/mjpeg/camera.py | 5 ++--- homeassistant/components/mobile_app/notify.py | 3 +-- homeassistant/components/mullvad/__init__.py | 4 ++-- homeassistant/components/mutesync/__init__.py | 4 ++-- homeassistant/components/mutesync/config_flow.py | 3 +-- homeassistant/components/mysensors/gateway.py | 5 ++--- homeassistant/components/nam/__init__.py | 3 +-- homeassistant/components/nam/config_flow.py | 5 ++--- homeassistant/components/nextdns/__init__.py | 5 ++--- homeassistant/components/nextdns/config_flow.py | 3 +-- homeassistant/components/nina/__init__.py | 4 ++-- homeassistant/components/no_ip/__init__.py | 3 +-- homeassistant/components/nuki/__init__.py | 10 +++++----- homeassistant/components/nut/__init__.py | 4 ++-- homeassistant/components/nzbget/coordinator.py | 4 ++-- 49 files changed, 78 insertions(+), 111 deletions(-) diff --git a/homeassistant/components/ialarm/__init__.py b/homeassistant/components/ialarm/__init__.py index b258c702725..b2c1800914e 100644 --- a/homeassistant/components/ialarm/__init__.py +++ b/homeassistant/components/ialarm/__init__.py @@ -4,7 +4,6 @@ from __future__ import annotations import asyncio import logging -from async_timeout import timeout from pyialarm import IAlarm from homeassistant.components.alarm_control_panel import SCAN_INTERVAL @@ -27,7 +26,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: ialarm = IAlarm(host, port) try: - async with timeout(10): + async with asyncio.timeout(10): mac = await hass.async_add_executor_job(ialarm.get_mac) except (asyncio.TimeoutError, ConnectionError) as ex: raise ConfigEntryNotReady from ex @@ -81,7 +80,7 @@ class IAlarmDataUpdateCoordinator(DataUpdateCoordinator[None]): async def _async_update_data(self) -> None: """Fetch data from iAlarm.""" try: - async with timeout(10): + async with asyncio.timeout(10): await self.hass.async_add_executor_job(self._update_data) except ConnectionError as error: raise UpdateFailed(error) from error diff --git a/homeassistant/components/iammeter/sensor.py b/homeassistant/components/iammeter/sensor.py index 206b5def832..ca468200370 100644 --- a/homeassistant/components/iammeter/sensor.py +++ b/homeassistant/components/iammeter/sensor.py @@ -5,7 +5,6 @@ import asyncio from datetime import timedelta import logging -import async_timeout from iammeter import real_time_api from iammeter.power_meter import IamMeterError import voluptuous as vol @@ -52,7 +51,7 @@ async def async_setup_platform( config_port = config[CONF_PORT] config_name = config[CONF_NAME] try: - async with async_timeout.timeout(PLATFORM_TIMEOUT): + async with asyncio.timeout(PLATFORM_TIMEOUT): api = await real_time_api(config_host, config_port) except (IamMeterError, asyncio.TimeoutError) as err: _LOGGER.error("Device is not ready") @@ -60,7 +59,7 @@ async def async_setup_platform( async def async_update_data(): try: - async with async_timeout.timeout(PLATFORM_TIMEOUT): + async with asyncio.timeout(PLATFORM_TIMEOUT): return await api.get_data() except (IamMeterError, asyncio.TimeoutError) as err: raise UpdateFailed from err diff --git a/homeassistant/components/image/__init__.py b/homeassistant/components/image/__init__.py index e4bc1664fd9..d1895053f02 100644 --- a/homeassistant/components/image/__init__.py +++ b/homeassistant/components/image/__init__.py @@ -11,7 +11,6 @@ from random import SystemRandom from typing import Final, final from aiohttp import hdrs, web -import async_timeout import httpx from homeassistant.components.http import KEY_AUTHENTICATED, HomeAssistantView @@ -72,7 +71,7 @@ def valid_image_content_type(content_type: str | None) -> str: async def _async_get_image(image_entity: ImageEntity, timeout: int) -> Image: """Fetch image from an image entity.""" with suppress(asyncio.CancelledError, asyncio.TimeoutError, ImageContentTypeError): - async with async_timeout.timeout(timeout): + async with asyncio.timeout(timeout): if image_bytes := await image_entity.async_image(): content_type = valid_image_content_type(image_entity.content_type) image = Image(content_type, image_bytes) diff --git a/homeassistant/components/imap/coordinator.py b/homeassistant/components/imap/coordinator.py index b644c300979..b9b541997a3 100644 --- a/homeassistant/components/imap/coordinator.py +++ b/homeassistant/components/imap/coordinator.py @@ -11,7 +11,6 @@ import logging from typing import Any from aioimaplib import AUTH, IMAP4_SSL, NONAUTH, SELECTED, AioImapException -import async_timeout from homeassistant.config_entries import ConfigEntry from homeassistant.const import ( @@ -408,7 +407,7 @@ class ImapPushDataUpdateCoordinator(ImapDataUpdateCoordinator): idle: asyncio.Future = await self.imap_client.idle_start() await self.imap_client.wait_server_push() self.imap_client.idle_done() - async with async_timeout.timeout(10): + async with asyncio.timeout(10): await idle # From python 3.11 asyncio.TimeoutError is an alias of TimeoutError diff --git a/homeassistant/components/intellifire/coordinator.py b/homeassistant/components/intellifire/coordinator.py index f9502f70ee7..4045c19217b 100644 --- a/homeassistant/components/intellifire/coordinator.py +++ b/homeassistant/components/intellifire/coordinator.py @@ -1,10 +1,10 @@ """The IntelliFire integration.""" from __future__ import annotations +import asyncio from datetime import timedelta from aiohttp import ClientConnectionError -from async_timeout import timeout from intellifire4py import IntellifirePollData from intellifire4py.intellifire import IntellifireAPILocal @@ -38,7 +38,7 @@ class IntellifireDataUpdateCoordinator(DataUpdateCoordinator[IntellifirePollData await self._api.start_background_polling() # Don't return uninitialized poll data - async with timeout(15): + async with asyncio.timeout(15): try: await self._api.poll() except (ConnectionError, ClientConnectionError) as exception: diff --git a/homeassistant/components/ipma/__init__.py b/homeassistant/components/ipma/__init__.py index dd46593998e..5ff89fa8ed5 100644 --- a/homeassistant/components/ipma/__init__.py +++ b/homeassistant/components/ipma/__init__.py @@ -2,7 +2,6 @@ import asyncio import logging -import async_timeout from pyipma import IPMAException from pyipma.api import IPMA_API from pyipma.location import Location @@ -32,7 +31,7 @@ async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> b api = IPMA_API(async_get_clientsession(hass)) try: - async with async_timeout.timeout(30): + async with asyncio.timeout(30): location = await Location.get(api, float(latitude), float(longitude)) except (IPMAException, asyncio.TimeoutError) as err: raise ConfigEntryNotReady( diff --git a/homeassistant/components/ipma/sensor.py b/homeassistant/components/ipma/sensor.py index f02f8b7d9d0..1bd257a3994 100644 --- a/homeassistant/components/ipma/sensor.py +++ b/homeassistant/components/ipma/sensor.py @@ -1,11 +1,11 @@ """Support for IPMA sensors.""" from __future__ import annotations +import asyncio from collections.abc import Callable, Coroutine from dataclasses import dataclass import logging -import async_timeout from pyipma.api import IPMA_API from pyipma.location import Location @@ -83,7 +83,7 @@ class IPMASensor(SensorEntity, IPMADevice): @Throttle(MIN_TIME_BETWEEN_UPDATES) async def async_update(self) -> None: """Update Fire risk.""" - async with async_timeout.timeout(10): + async with asyncio.timeout(10): self._attr_native_value = await self.entity_description.value_fn( self._location, self._api ) diff --git a/homeassistant/components/ipma/weather.py b/homeassistant/components/ipma/weather.py index b8e994a7500..d4d11aa26e8 100644 --- a/homeassistant/components/ipma/weather.py +++ b/homeassistant/components/ipma/weather.py @@ -6,7 +6,6 @@ import contextlib import logging from typing import Literal -import async_timeout from pyipma.api import IPMA_API from pyipma.forecast import Forecast as IPMAForecast from pyipma.location import Location @@ -91,7 +90,7 @@ class IPMAWeather(WeatherEntity, IPMADevice): @Throttle(MIN_TIME_BETWEEN_UPDATES) async def async_update(self) -> None: """Update Condition and Forecast.""" - async with async_timeout.timeout(10): + async with asyncio.timeout(10): new_observation = await self._location.observation(self._api) if new_observation: @@ -225,7 +224,7 @@ class IPMAWeather(WeatherEntity, IPMADevice): ) -> None: """Try to update weather forecast.""" with contextlib.suppress(asyncio.TimeoutError): - async with async_timeout.timeout(10): + async with asyncio.timeout(10): await self._update_forecast(forecast_type, period, False) async def async_forecast_daily(self) -> list[Forecast]: diff --git a/homeassistant/components/isy994/__init__.py b/homeassistant/components/isy994/__init__.py index f19e21b4f6d..c611bf83050 100644 --- a/homeassistant/components/isy994/__init__.py +++ b/homeassistant/components/isy994/__init__.py @@ -5,7 +5,6 @@ import asyncio from urllib.parse import urlparse from aiohttp import CookieJar -import async_timeout from pyisy import ISY, ISYConnectionError, ISYInvalidAuthError, ISYResponseParseError from pyisy.constants import CONFIG_NETWORKING, CONFIG_PORTAL import voluptuous as vol @@ -101,7 +100,7 @@ async def async_setup_entry( ) try: - async with async_timeout.timeout(60): + async with asyncio.timeout(60): await isy.initialize() except asyncio.TimeoutError as err: raise ConfigEntryNotReady( diff --git a/homeassistant/components/isy994/config_flow.py b/homeassistant/components/isy994/config_flow.py index d6bbf236c13..9f16b4a0d0c 100644 --- a/homeassistant/components/isy994/config_flow.py +++ b/homeassistant/components/isy994/config_flow.py @@ -1,13 +1,13 @@ """Config flow for Universal Devices ISY/IoX integration.""" from __future__ import annotations +import asyncio from collections.abc import Mapping import logging from typing import Any from urllib.parse import urlparse, urlunparse from aiohttp import CookieJar -import async_timeout from pyisy import ISYConnectionError, ISYInvalidAuthError, ISYResponseParseError from pyisy.configuration import Configuration from pyisy.connection import Connection @@ -97,7 +97,7 @@ async def validate_input( ) try: - async with async_timeout.timeout(30): + async with asyncio.timeout(30): isy_conf_xml = await isy_conn.test_connection() except ISYInvalidAuthError as error: raise InvalidAuth from error diff --git a/homeassistant/components/izone/config_flow.py b/homeassistant/components/izone/config_flow.py index af5205feb07..8e6fe584456 100644 --- a/homeassistant/components/izone/config_flow.py +++ b/homeassistant/components/izone/config_flow.py @@ -4,8 +4,6 @@ import asyncio from contextlib import suppress import logging -from async_timeout import timeout - from homeassistant.core import HomeAssistant, callback from homeassistant.helpers import config_entry_flow from homeassistant.helpers.dispatcher import async_dispatcher_connect @@ -28,7 +26,7 @@ async def _async_has_devices(hass: HomeAssistant) -> bool: disco = await async_start_discovery_service(hass) with suppress(asyncio.TimeoutError): - async with timeout(TIMEOUT_DISCOVERY): + async with asyncio.timeout(TIMEOUT_DISCOVERY): await controller_ready.wait() if not disco.pi_disco.controllers: diff --git a/homeassistant/components/kaiterra/api_data.py b/homeassistant/components/kaiterra/api_data.py index 980c01d02a1..09d470af1de 100644 --- a/homeassistant/components/kaiterra/api_data.py +++ b/homeassistant/components/kaiterra/api_data.py @@ -3,7 +3,6 @@ import asyncio from logging import getLogger from aiohttp.client_exceptions import ClientConnectorError, ClientResponseError -import async_timeout from kaiterra_async_client import AQIStandard, KaiterraAPIClient, Units from homeassistant.const import CONF_API_KEY, CONF_DEVICE_ID, CONF_DEVICES, CONF_TYPE @@ -53,7 +52,7 @@ class KaiterraApiData: """Get the data from Kaiterra API.""" try: - async with async_timeout.timeout(10): + async with asyncio.timeout(10): data = await self._api.get_latest_sensor_readings(self._devices) except (ClientResponseError, ClientConnectorError, asyncio.TimeoutError) as err: _LOGGER.debug("Couldn't fetch data from Kaiterra API: %s", err) diff --git a/homeassistant/components/kmtronic/__init__.py b/homeassistant/components/kmtronic/__init__.py index ef4e8ebb303..638884dff26 100644 --- a/homeassistant/components/kmtronic/__init__.py +++ b/homeassistant/components/kmtronic/__init__.py @@ -1,9 +1,9 @@ """The kmtronic integration.""" +import asyncio from datetime import timedelta import logging import aiohttp -import async_timeout from pykmtronic.auth import Auth from pykmtronic.hub import KMTronicHubAPI @@ -33,7 +33,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: async def async_update_data(): try: - async with async_timeout.timeout(10): + async with asyncio.timeout(10): await hub.async_update_relays() except aiohttp.client_exceptions.ClientResponseError as err: raise UpdateFailed(f"Wrong credentials: {err}") from err diff --git a/homeassistant/components/kraken/__init__.py b/homeassistant/components/kraken/__init__.py index 1cfade2a6b7..395de951bbd 100644 --- a/homeassistant/components/kraken/__init__.py +++ b/homeassistant/components/kraken/__init__.py @@ -5,7 +5,6 @@ import asyncio from datetime import timedelta import logging -import async_timeout import krakenex import pykrakenapi @@ -73,7 +72,7 @@ class KrakenData: once. """ try: - async with async_timeout.timeout(10): + async with asyncio.timeout(10): return await self._hass.async_add_executor_job(self._get_kraken_data) except pykrakenapi.pykrakenapi.KrakenAPIError as error: if "Unknown asset pair" in str(error): diff --git a/homeassistant/components/landisgyr_heat_meter/config_flow.py b/homeassistant/components/landisgyr_heat_meter/config_flow.py index 0353e5e63c7..4f7966ae90f 100644 --- a/homeassistant/components/landisgyr_heat_meter/config_flow.py +++ b/homeassistant/components/landisgyr_heat_meter/config_flow.py @@ -5,7 +5,6 @@ import asyncio import logging from typing import Any -import async_timeout import serial from serial.tools import list_ports import ultraheat_api @@ -105,7 +104,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): reader = ultraheat_api.UltraheatReader(port) heat_meter = ultraheat_api.HeatMeterService(reader) try: - async with async_timeout.timeout(ULTRAHEAT_TIMEOUT): + async with asyncio.timeout(ULTRAHEAT_TIMEOUT): # validate and retrieve the model and device number for a unique id data = await self.hass.async_add_executor_job(heat_meter.read) diff --git a/homeassistant/components/landisgyr_heat_meter/coordinator.py b/homeassistant/components/landisgyr_heat_meter/coordinator.py index c85c661e79c..27231dc7b92 100644 --- a/homeassistant/components/landisgyr_heat_meter/coordinator.py +++ b/homeassistant/components/landisgyr_heat_meter/coordinator.py @@ -1,8 +1,8 @@ """Data update coordinator for the ultraheat api.""" +import asyncio import logging -import async_timeout import serial from ultraheat_api.response import HeatMeterResponse from ultraheat_api.service import HeatMeterService @@ -31,7 +31,7 @@ class UltraheatCoordinator(DataUpdateCoordinator[HeatMeterResponse]): async def _async_update_data(self) -> HeatMeterResponse: """Fetch data from API endpoint.""" try: - async with async_timeout.timeout(ULTRAHEAT_TIMEOUT): + async with asyncio.timeout(ULTRAHEAT_TIMEOUT): return await self.hass.async_add_executor_job(self.api.read) except (FileNotFoundError, serial.serialutil.SerialException) as err: raise UpdateFailed(f"Error communicating with API: {err}") from err diff --git a/homeassistant/components/laundrify/coordinator.py b/homeassistant/components/laundrify/coordinator.py index 47728a38983..121d2cd913f 100644 --- a/homeassistant/components/laundrify/coordinator.py +++ b/homeassistant/components/laundrify/coordinator.py @@ -1,8 +1,8 @@ """Custom DataUpdateCoordinator for the laundrify integration.""" +import asyncio from datetime import timedelta import logging -import async_timeout from laundrify_aio import LaundrifyAPI from laundrify_aio.exceptions import ApiConnectionException, UnauthorizedException @@ -36,7 +36,7 @@ class LaundrifyUpdateCoordinator(DataUpdateCoordinator[dict[str, LaundrifyDevice try: # Note: asyncio.TimeoutError and aiohttp.ClientError are already # handled by the data update coordinator. - async with async_timeout.timeout(REQUEST_TIMEOUT): + async with asyncio.timeout(REQUEST_TIMEOUT): return {m["_id"]: m for m in await self.laundrify_api.get_machines()} except UnauthorizedException as err: # Raising ConfigEntryAuthFailed will cancel future updates diff --git a/homeassistant/components/led_ble/__init__.py b/homeassistant/components/led_ble/__init__.py index 768300ff534..1bdb8bf8ec9 100644 --- a/homeassistant/components/led_ble/__init__.py +++ b/homeassistant/components/led_ble/__init__.py @@ -5,7 +5,6 @@ import asyncio from datetime import timedelta import logging -import async_timeout from led_ble import BLEAK_EXCEPTIONS, LEDBLE from homeassistant.components import bluetooth @@ -78,7 +77,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: raise try: - async with async_timeout.timeout(DEVICE_TIMEOUT): + async with asyncio.timeout(DEVICE_TIMEOUT): await startup_event.wait() except asyncio.TimeoutError as ex: raise ConfigEntryNotReady( diff --git a/homeassistant/components/lifx_cloud/scene.py b/homeassistant/components/lifx_cloud/scene.py index ce03a595f64..bcf8ed1dc2c 100644 --- a/homeassistant/components/lifx_cloud/scene.py +++ b/homeassistant/components/lifx_cloud/scene.py @@ -8,7 +8,6 @@ from typing import Any import aiohttp from aiohttp.hdrs import AUTHORIZATION -import async_timeout import voluptuous as vol from homeassistant.components.scene import Scene @@ -48,7 +47,7 @@ async def async_setup_platform( try: httpsession = async_get_clientsession(hass) - async with async_timeout.timeout(timeout): + async with asyncio.timeout(timeout): scenes_resp = await httpsession.get(url, headers=headers) except (asyncio.TimeoutError, aiohttp.ClientError): @@ -90,7 +89,7 @@ class LifxCloudScene(Scene): try: httpsession = async_get_clientsession(self.hass) - async with async_timeout.timeout(self._timeout): + async with asyncio.timeout(self._timeout): await httpsession.put(url, headers=self._headers) except (asyncio.TimeoutError, aiohttp.ClientError): diff --git a/homeassistant/components/logi_circle/__init__.py b/homeassistant/components/logi_circle/__init__.py index 93e23be5d8d..a14cd60c993 100644 --- a/homeassistant/components/logi_circle/__init__.py +++ b/homeassistant/components/logi_circle/__init__.py @@ -2,7 +2,6 @@ import asyncio from aiohttp.client_exceptions import ClientResponseError -import async_timeout from logi_circle import LogiCircle from logi_circle.exception import AuthorizationFailed import voluptuous as vol @@ -154,7 +153,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: return False try: - async with async_timeout.timeout(_TIMEOUT): + async with asyncio.timeout(_TIMEOUT): # Ensure the cameras property returns the same Camera objects for # all devices. Performs implicit login and session validation. await logi_circle.synchronize_cameras() diff --git a/homeassistant/components/logi_circle/config_flow.py b/homeassistant/components/logi_circle/config_flow.py index ff7528ac9f6..9785940aca2 100644 --- a/homeassistant/components/logi_circle/config_flow.py +++ b/homeassistant/components/logi_circle/config_flow.py @@ -3,7 +3,6 @@ import asyncio from collections import OrderedDict from http import HTTPStatus -import async_timeout from logi_circle import LogiCircle from logi_circle.exception import AuthorizationFailed import voluptuous as vol @@ -158,7 +157,7 @@ class LogiCircleFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): ) try: - async with async_timeout.timeout(_TIMEOUT): + async with asyncio.timeout(_TIMEOUT): await logi_session.authorize(code) except AuthorizationFailed: (self.hass.data[DATA_FLOW_IMPL][DOMAIN][EXTERNAL_ERRORS]) = "invalid_auth" diff --git a/homeassistant/components/london_underground/sensor.py b/homeassistant/components/london_underground/sensor.py index 8217b3913a8..7e52186fa51 100644 --- a/homeassistant/components/london_underground/sensor.py +++ b/homeassistant/components/london_underground/sensor.py @@ -1,10 +1,10 @@ """Sensor for checking the status of London Underground tube lines.""" from __future__ import annotations +import asyncio from datetime import timedelta import logging -import async_timeout from london_tube_status import TubeData import voluptuous as vol @@ -90,7 +90,7 @@ class LondonTubeCoordinator(DataUpdateCoordinator): self._data = data async def _async_update_data(self): - async with async_timeout.timeout(10): + async with asyncio.timeout(10): await self._data.update() return self._data.data diff --git a/homeassistant/components/loqed/coordinator.py b/homeassistant/components/loqed/coordinator.py index 42e0d523aba..d33cd8772b2 100644 --- a/homeassistant/components/loqed/coordinator.py +++ b/homeassistant/components/loqed/coordinator.py @@ -1,9 +1,9 @@ """Provides the coordinator for a LOQED lock.""" +import asyncio import logging from typing import TypedDict from aiohttp.web import Request -import async_timeout from loqedAPI import loqed from homeassistant.components import cloud, webhook @@ -86,7 +86,7 @@ class LoqedDataCoordinator(DataUpdateCoordinator[StatusMessage]): async def _async_update_data(self) -> StatusMessage: """Fetch data from API endpoint.""" - async with async_timeout.timeout(10): + async with asyncio.timeout(10): return await self._api.async_get_lock_details() async def _handle_webhook( diff --git a/homeassistant/components/lutron_caseta/__init__.py b/homeassistant/components/lutron_caseta/__init__.py index 0a6a2aa8211..41369046d51 100644 --- a/homeassistant/components/lutron_caseta/__init__.py +++ b/homeassistant/components/lutron_caseta/__init__.py @@ -8,7 +8,6 @@ import logging import ssl from typing import Any, cast -import async_timeout from pylutron_caseta import BUTTON_STATUS_PRESSED from pylutron_caseta.smartbridge import Smartbridge import voluptuous as vol @@ -173,7 +172,7 @@ async def async_setup_entry( timed_out = True with contextlib.suppress(asyncio.TimeoutError): - async with async_timeout.timeout(BRIDGE_TIMEOUT): + async with asyncio.timeout(BRIDGE_TIMEOUT): await bridge.connect() timed_out = False diff --git a/homeassistant/components/lutron_caseta/config_flow.py b/homeassistant/components/lutron_caseta/config_flow.py index 74819e25e8e..9b243a3ec98 100644 --- a/homeassistant/components/lutron_caseta/config_flow.py +++ b/homeassistant/components/lutron_caseta/config_flow.py @@ -6,7 +6,6 @@ import logging import os import ssl -import async_timeout from pylutron_caseta.pairing import PAIR_CA, PAIR_CERT, PAIR_KEY, async_pair from pylutron_caseta.smartbridge import Smartbridge import voluptuous as vol @@ -226,7 +225,7 @@ class LutronCasetaFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): return None try: - async with async_timeout.timeout(BRIDGE_TIMEOUT): + async with asyncio.timeout(BRIDGE_TIMEOUT): await bridge.connect() except asyncio.TimeoutError: _LOGGER.error( diff --git a/homeassistant/components/lyric/__init__.py b/homeassistant/components/lyric/__init__.py index c2c1c9ae77a..a407afaa207 100644 --- a/homeassistant/components/lyric/__init__.py +++ b/homeassistant/components/lyric/__init__.py @@ -1,6 +1,7 @@ """The Honeywell Lyric integration.""" from __future__ import annotations +import asyncio from datetime import timedelta from http import HTTPStatus import logging @@ -10,7 +11,6 @@ from aiolyric import Lyric from aiolyric.exceptions import LyricAuthenticationException, LyricException from aiolyric.objects.device import LyricDevice from aiolyric.objects.location import LyricLocation -import async_timeout from homeassistant.config_entries import ConfigEntry from homeassistant.const import Platform @@ -74,7 +74,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: raise UpdateFailed(exception) from exception try: - async with async_timeout.timeout(60): + async with asyncio.timeout(60): await lyric.get_locations() return lyric except LyricAuthenticationException as exception: diff --git a/homeassistant/components/mailbox/__init__.py b/homeassistant/components/mailbox/__init__.py index 75cea546b71..679abfd3164 100644 --- a/homeassistant/components/mailbox/__init__.py +++ b/homeassistant/components/mailbox/__init__.py @@ -10,7 +10,6 @@ from typing import Any, Final from aiohttp import web from aiohttp.web_exceptions import HTTPNotFound -import async_timeout from homeassistant.components import frontend from homeassistant.components.http import HomeAssistantView @@ -267,7 +266,7 @@ class MailboxMediaView(MailboxView): mailbox = self.get_mailbox(platform) with suppress(asyncio.CancelledError, asyncio.TimeoutError): - async with async_timeout.timeout(10): + async with asyncio.timeout(10): try: stream = await mailbox.async_get_media(msgid) except StreamError as err: diff --git a/homeassistant/components/matter/__init__.py b/homeassistant/components/matter/__init__.py index 59c5ec9efc8..a2aa2c5ceff 100644 --- a/homeassistant/components/matter/__init__.py +++ b/homeassistant/components/matter/__init__.py @@ -4,7 +4,6 @@ from __future__ import annotations import asyncio from contextlib import suppress -import async_timeout from matter_server.client import MatterClient from matter_server.client.exceptions import CannotConnect, InvalidServerVersion from matter_server.common.errors import MatterError, NodeCommissionFailed, NodeNotExists @@ -42,7 +41,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: matter_client = MatterClient(entry.data[CONF_URL], async_get_clientsession(hass)) try: - async with async_timeout.timeout(CONNECT_TIMEOUT): + async with asyncio.timeout(CONNECT_TIMEOUT): await matter_client.connect() except (CannotConnect, asyncio.TimeoutError) as err: raise ConfigEntryNotReady("Failed to connect to matter server") from err @@ -87,7 +86,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: ) try: - async with async_timeout.timeout(LISTEN_READY_TIMEOUT): + async with asyncio.timeout(LISTEN_READY_TIMEOUT): await init_ready.wait() except asyncio.TimeoutError as err: listen_task.cancel() diff --git a/homeassistant/components/mazda/__init__.py b/homeassistant/components/mazda/__init__.py index 1322a7db300..f375b8a75cd 100644 --- a/homeassistant/components/mazda/__init__.py +++ b/homeassistant/components/mazda/__init__.py @@ -1,11 +1,11 @@ """The Mazda Connected Services integration.""" from __future__ import annotations +import asyncio from datetime import timedelta import logging from typing import TYPE_CHECKING -import async_timeout from pymazda import ( Client as MazdaAPI, MazdaAccountLockedException, @@ -53,7 +53,7 @@ PLATFORMS = [ async def with_timeout(task, timeout_seconds=30): """Run an async task with a timeout.""" - async with async_timeout.timeout(timeout_seconds): + async with asyncio.timeout(timeout_seconds): return await task diff --git a/homeassistant/components/meater/__init__.py b/homeassistant/components/meater/__init__.py index 6db3093567d..12fdb7f3a06 100644 --- a/homeassistant/components/meater/__init__.py +++ b/homeassistant/components/meater/__init__.py @@ -1,8 +1,8 @@ """The Meater Temperature Probe integration.""" +import asyncio from datetime import timedelta import logging -import async_timeout from meater import ( AuthenticationError, MeaterApi, @@ -49,7 +49,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: try: # Note: asyncio.TimeoutError and aiohttp.ClientError are already # handled by the data update coordinator. - async with async_timeout.timeout(10): + async with asyncio.timeout(10): devices: list[MeaterProbe] = await meater_api.get_all_devices() except AuthenticationError as err: raise ConfigEntryAuthFailed("The API call wasn't authenticated") from err diff --git a/homeassistant/components/media_player/__init__.py b/homeassistant/components/media_player/__init__.py index 501fa5c3fb8..2acb516fa95 100644 --- a/homeassistant/components/media_player/__init__.py +++ b/homeassistant/components/media_player/__init__.py @@ -19,7 +19,6 @@ from urllib.parse import quote, urlparse from aiohttp import web from aiohttp.hdrs import CACHE_CONTROL, CONTENT_TYPE from aiohttp.typedefs import LooseHeaders -import async_timeout import voluptuous as vol from yarl import URL @@ -1259,7 +1258,7 @@ async def async_fetch_image( content, content_type = (None, None) websession = async_get_clientsession(hass) with suppress(asyncio.TimeoutError): - async with async_timeout.timeout(10): + async with asyncio.timeout(10): response = await websession.get(url) if response.status == HTTPStatus.OK: content = await response.read() diff --git a/homeassistant/components/melcloud/__init__.py b/homeassistant/components/melcloud/__init__.py index 2d7354f250f..68b40d8567f 100644 --- a/homeassistant/components/melcloud/__init__.py +++ b/homeassistant/components/melcloud/__init__.py @@ -7,7 +7,6 @@ import logging from typing import Any from aiohttp import ClientConnectionError -from async_timeout import timeout from pymelcloud import Device, get_devices import voluptuous as vol @@ -152,7 +151,7 @@ async def mel_devices_setup( """Query connected devices from MELCloud.""" session = async_get_clientsession(hass) try: - async with timeout(10): + async with asyncio.timeout(10): all_devices = await get_devices( token, session, diff --git a/homeassistant/components/melcloud/config_flow.py b/homeassistant/components/melcloud/config_flow.py index 3d6d42c8b7a..0ff17ea751a 100644 --- a/homeassistant/components/melcloud/config_flow.py +++ b/homeassistant/components/melcloud/config_flow.py @@ -5,7 +5,6 @@ import asyncio from http import HTTPStatus from aiohttp import ClientError, ClientResponseError -from async_timeout import timeout import pymelcloud import voluptuous as vol @@ -78,7 +77,7 @@ class FlowHandler(config_entries.ConfigFlow, domain=DOMAIN): ): """Create client.""" try: - async with timeout(10): + async with asyncio.timeout(10): if (acquired_token := token) is None: acquired_token = await pymelcloud.login( username, diff --git a/homeassistant/components/microsoft_face/__init__.py b/homeassistant/components/microsoft_face/__init__.py index f57a9146858..6e47ad79f5b 100644 --- a/homeassistant/components/microsoft_face/__init__.py +++ b/homeassistant/components/microsoft_face/__init__.py @@ -7,7 +7,6 @@ import logging import aiohttp from aiohttp.hdrs import CONTENT_TYPE -import async_timeout import voluptuous as vol from homeassistant.components import camera @@ -314,7 +313,7 @@ class MicrosoftFace: payload = None try: - async with async_timeout.timeout(self.timeout): + async with asyncio.timeout(self.timeout): response = await getattr(self.websession, method)( url, data=payload, headers=headers, params=params ) diff --git a/homeassistant/components/mjpeg/camera.py b/homeassistant/components/mjpeg/camera.py index dab5b477ede..a2b2de4eda8 100644 --- a/homeassistant/components/mjpeg/camera.py +++ b/homeassistant/components/mjpeg/camera.py @@ -7,7 +7,6 @@ from contextlib import suppress import aiohttp from aiohttp import web -import async_timeout import httpx from yarl import URL @@ -144,7 +143,7 @@ class MjpegCamera(Camera): websession = async_get_clientsession(self.hass, verify_ssl=self._verify_ssl) try: - async with async_timeout.timeout(TIMEOUT): + async with asyncio.timeout(TIMEOUT): response = await websession.get(self._still_image_url, auth=self._auth) image = await response.read() @@ -206,7 +205,7 @@ class MjpegCamera(Camera): async for chunk in stream.aiter_bytes(BUFFER_SIZE): if not self.hass.is_running: break - async with async_timeout.timeout(TIMEOUT): + async with asyncio.timeout(TIMEOUT): await response.write(chunk) return response diff --git a/homeassistant/components/mobile_app/notify.py b/homeassistant/components/mobile_app/notify.py index dc9f8aaedcd..47b997e410c 100644 --- a/homeassistant/components/mobile_app/notify.py +++ b/homeassistant/components/mobile_app/notify.py @@ -7,7 +7,6 @@ from http import HTTPStatus import logging import aiohttp -import async_timeout from homeassistant.components.notify import ( ATTR_DATA, @@ -166,7 +165,7 @@ class MobileAppNotificationService(BaseNotificationService): target_data["registration_info"] = reg_info try: - async with async_timeout.timeout(10): + async with asyncio.timeout(10): response = await async_get_clientsession(self._hass).post( push_url, json=target_data ) diff --git a/homeassistant/components/mullvad/__init__.py b/homeassistant/components/mullvad/__init__.py index b8551682f1f..cd692f00537 100644 --- a/homeassistant/components/mullvad/__init__.py +++ b/homeassistant/components/mullvad/__init__.py @@ -1,8 +1,8 @@ """The Mullvad VPN integration.""" +import asyncio from datetime import timedelta import logging -import async_timeout from mullvad_api import MullvadAPI from homeassistant.config_entries import ConfigEntry @@ -19,7 +19,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: """Set up Mullvad VPN integration.""" async def async_get_mullvad_api_data(): - async with async_timeout.timeout(10): + async with asyncio.timeout(10): api = await hass.async_add_executor_job(MullvadAPI) return api.data diff --git a/homeassistant/components/mutesync/__init__.py b/homeassistant/components/mutesync/__init__.py index aa5e0d70fe9..cbbbbaa6a11 100644 --- a/homeassistant/components/mutesync/__init__.py +++ b/homeassistant/components/mutesync/__init__.py @@ -1,9 +1,9 @@ """The mütesync integration.""" from __future__ import annotations +import asyncio import logging -import async_timeout import mutesync from homeassistant.config_entries import ConfigEntry @@ -27,7 +27,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: async def update_data(): """Update the data.""" - async with async_timeout.timeout(2.5): + async with asyncio.timeout(2.5): state = await client.get_state() if state["muted"] is None or state["in_meeting"] is None: diff --git a/homeassistant/components/mutesync/config_flow.py b/homeassistant/components/mutesync/config_flow.py index 7ebbc718a5b..e06c0b07c87 100644 --- a/homeassistant/components/mutesync/config_flow.py +++ b/homeassistant/components/mutesync/config_flow.py @@ -5,7 +5,6 @@ import asyncio from typing import Any import aiohttp -import async_timeout import mutesync import voluptuous as vol @@ -27,7 +26,7 @@ async def validate_input(hass: HomeAssistant, data: dict[str, Any]) -> dict[str, """ session = async_get_clientsession(hass) try: - async with async_timeout.timeout(5): + async with asyncio.timeout(5): token = await mutesync.authenticate(session, data["host"]) except aiohttp.ClientResponseError as error: if error.status == 403: diff --git a/homeassistant/components/mysensors/gateway.py b/homeassistant/components/mysensors/gateway.py index 1d016a791e3..ce602e6266d 100644 --- a/homeassistant/components/mysensors/gateway.py +++ b/homeassistant/components/mysensors/gateway.py @@ -9,7 +9,6 @@ import socket import sys from typing import Any -import async_timeout from mysensors import BaseAsyncGateway, Message, Sensor, mysensors import voluptuous as vol @@ -107,7 +106,7 @@ async def try_connect( connect_task = None try: connect_task = asyncio.create_task(gateway.start()) - async with async_timeout.timeout(GATEWAY_READY_TIMEOUT): + async with asyncio.timeout(GATEWAY_READY_TIMEOUT): await gateway_ready.wait() return True except asyncio.TimeoutError: @@ -299,7 +298,7 @@ async def _gw_start( # Gatways connected via mqtt doesn't send gateway ready message. return try: - async with async_timeout.timeout(GATEWAY_READY_TIMEOUT): + async with asyncio.timeout(GATEWAY_READY_TIMEOUT): await gateway_ready.wait() except asyncio.TimeoutError: _LOGGER.warning( diff --git a/homeassistant/components/nam/__init__.py b/homeassistant/components/nam/__init__.py index 5004bafeb1b..d5881f52d8d 100644 --- a/homeassistant/components/nam/__init__.py +++ b/homeassistant/components/nam/__init__.py @@ -6,7 +6,6 @@ import logging from typing import cast from aiohttp.client_exceptions import ClientConnectorError, ClientError -import async_timeout from nettigo_air_monitor import ( ApiError, AuthFailedError, @@ -111,7 +110,7 @@ class NAMDataUpdateCoordinator(DataUpdateCoordinator[NAMSensors]): async def _async_update_data(self) -> NAMSensors: """Update data via library.""" try: - async with async_timeout.timeout(10): + async with asyncio.timeout(10): data = await self.nam.async_update() # We do not need to catch AuthFailed exception here because sensor data is # always available without authorization. diff --git a/homeassistant/components/nam/config_flow.py b/homeassistant/components/nam/config_flow.py index eef4c33e5f0..7eee84a66a4 100644 --- a/homeassistant/components/nam/config_flow.py +++ b/homeassistant/components/nam/config_flow.py @@ -8,7 +8,6 @@ import logging from typing import Any from aiohttp.client_exceptions import ClientConnectorError -import async_timeout from nettigo_air_monitor import ( ApiError, AuthFailedError, @@ -51,7 +50,7 @@ async def async_get_config(hass: HomeAssistant, host: str) -> NamConfig: options = ConnectionOptions(host) nam = await NettigoAirMonitor.create(websession, options) - async with async_timeout.timeout(10): + async with asyncio.timeout(10): mac = await nam.async_get_mac_address() return NamConfig(mac, nam.auth_enabled) @@ -67,7 +66,7 @@ async def async_check_credentials( nam = await NettigoAirMonitor.create(websession, options) - async with async_timeout.timeout(10): + async with asyncio.timeout(10): await nam.async_check_credentials() diff --git a/homeassistant/components/nextdns/__init__.py b/homeassistant/components/nextdns/__init__.py index 3865136b2ac..011b487910f 100644 --- a/homeassistant/components/nextdns/__init__.py +++ b/homeassistant/components/nextdns/__init__.py @@ -7,7 +7,6 @@ import logging from typing import TypeVar from aiohttp.client_exceptions import ClientConnectorError -from async_timeout import timeout from nextdns import ( AnalyticsDnssec, AnalyticsEncryption, @@ -75,7 +74,7 @@ class NextDnsUpdateCoordinator(DataUpdateCoordinator[CoordinatorDataT]): async def _async_update_data(self) -> CoordinatorDataT: """Update data via internal method.""" try: - async with timeout(10): + async with asyncio.timeout(10): return await self._async_update_data_internal() except (ApiError, ClientConnectorError, InvalidApiKeyError) as err: raise UpdateFailed(err) from err @@ -162,7 +161,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: websession = async_get_clientsession(hass) try: - async with timeout(10): + async with asyncio.timeout(10): nextdns = await NextDns.create(websession, api_key) except (ApiError, ClientConnectorError, asyncio.TimeoutError) as err: raise ConfigEntryNotReady from err diff --git a/homeassistant/components/nextdns/config_flow.py b/homeassistant/components/nextdns/config_flow.py index 5c9bf04cfc1..3985644a478 100644 --- a/homeassistant/components/nextdns/config_flow.py +++ b/homeassistant/components/nextdns/config_flow.py @@ -5,7 +5,6 @@ import asyncio from typing import Any from aiohttp.client_exceptions import ClientConnectorError -from async_timeout import timeout from nextdns import ApiError, InvalidApiKeyError, NextDns import voluptuous as vol @@ -38,7 +37,7 @@ class NextDnsFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): if user_input is not None: self.api_key = user_input[CONF_API_KEY] try: - async with timeout(10): + async with asyncio.timeout(10): self.nextdns = await NextDns.create( websession, user_input[CONF_API_KEY] ) diff --git a/homeassistant/components/nina/__init__.py b/homeassistant/components/nina/__init__.py index fbb8e32bebe..dfb556deeb5 100644 --- a/homeassistant/components/nina/__init__.py +++ b/homeassistant/components/nina/__init__.py @@ -1,11 +1,11 @@ """The Nina integration.""" from __future__ import annotations +import asyncio from dataclasses import dataclass import re from typing import Any -from async_timeout import timeout from pynina import ApiError, Nina from homeassistant.config_entries import ConfigEntry @@ -103,7 +103,7 @@ class NINADataUpdateCoordinator( async def _async_update_data(self) -> dict[str, list[NinaWarningData]]: """Update data.""" - async with timeout(10): + async with asyncio.timeout(10): try: await self._nina.update() except ApiError as err: diff --git a/homeassistant/components/no_ip/__init__.py b/homeassistant/components/no_ip/__init__.py index 6688888df01..e91b5cec92d 100644 --- a/homeassistant/components/no_ip/__init__.py +++ b/homeassistant/components/no_ip/__init__.py @@ -6,7 +6,6 @@ import logging import aiohttp from aiohttp.hdrs import AUTHORIZATION, USER_AGENT -import async_timeout import voluptuous as vol from homeassistant.const import CONF_DOMAIN, CONF_PASSWORD, CONF_TIMEOUT, CONF_USERNAME @@ -100,7 +99,7 @@ async def _update_no_ip( } try: - async with async_timeout.timeout(timeout): + async with asyncio.timeout(timeout): resp = await session.get(url, params=params, headers=headers) body = await resp.text() diff --git a/homeassistant/components/nuki/__init__.py b/homeassistant/components/nuki/__init__.py index f72abc410ef..3b846d73477 100644 --- a/homeassistant/components/nuki/__init__.py +++ b/homeassistant/components/nuki/__init__.py @@ -1,6 +1,7 @@ """The nuki component.""" from __future__ import annotations +import asyncio from collections import defaultdict from datetime import timedelta from http import HTTPStatus @@ -8,7 +9,6 @@ import logging from typing import Generic, TypeVar from aiohttp import web -import async_timeout from pynuki import NukiBridge, NukiLock, NukiOpener from pynuki.bridge import InvalidCredentialsException from pynuki.device import NukiDevice @@ -126,7 +126,7 @@ async def _create_webhook( ir.async_delete_issue(hass, DOMAIN, "https_webhook") try: - async with async_timeout.timeout(10): + async with asyncio.timeout(10): await hass.async_add_executor_job( _register_webhook, bridge, entry.entry_id, url ) @@ -216,7 +216,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: """Stop and remove the Nuki webhook.""" webhook.async_unregister(hass, entry.entry_id) try: - async with async_timeout.timeout(10): + async with asyncio.timeout(10): await hass.async_add_executor_job( _remove_webhook, bridge, entry.entry_id ) @@ -252,7 +252,7 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: """Unload the Nuki entry.""" webhook.async_unregister(hass, entry.entry_id) try: - async with async_timeout.timeout(10): + async with asyncio.timeout(10): await hass.async_add_executor_job( _remove_webhook, hass.data[DOMAIN][entry.entry_id][DATA_BRIDGE], @@ -301,7 +301,7 @@ class NukiCoordinator(DataUpdateCoordinator[None]): try: # Note: asyncio.TimeoutError and aiohttp.ClientError are already # handled by the data update coordinator. - async with async_timeout.timeout(10): + async with asyncio.timeout(10): events = await self.hass.async_add_executor_job( self.update_devices, self.locks + self.openers ) diff --git a/homeassistant/components/nut/__init__.py b/homeassistant/components/nut/__init__.py index 9ffe1016aec..8b0d8fe4640 100644 --- a/homeassistant/components/nut/__init__.py +++ b/homeassistant/components/nut/__init__.py @@ -1,12 +1,12 @@ """The nut component.""" from __future__ import annotations +import asyncio from dataclasses import dataclass from datetime import timedelta import logging from typing import cast -import async_timeout from pynut2.nut2 import PyNUTClient, PyNUTError from homeassistant.config_entries import ConfigEntry @@ -65,7 +65,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: async def async_update_data() -> dict[str, str]: """Fetch data from NUT.""" - async with async_timeout.timeout(10): + async with asyncio.timeout(10): await hass.async_add_executor_job(data.update) if not data.status: raise UpdateFailed("Error fetching UPS state") diff --git a/homeassistant/components/nzbget/coordinator.py b/homeassistant/components/nzbget/coordinator.py index c037619d31b..7326fa50dd5 100644 --- a/homeassistant/components/nzbget/coordinator.py +++ b/homeassistant/components/nzbget/coordinator.py @@ -1,10 +1,10 @@ """Provides the NZBGet DataUpdateCoordinator.""" +import asyncio from collections.abc import Mapping from datetime import timedelta import logging from typing import Any -from async_timeout import timeout from pynzbgetapi import NZBGetAPI, NZBGetAPIException from homeassistant.const import ( @@ -96,7 +96,7 @@ class NZBGetDataUpdateCoordinator(DataUpdateCoordinator): } try: - async with timeout(4): + async with asyncio.timeout(4): return await self.hass.async_add_executor_job(_update_data) except NZBGetAPIException as error: raise UpdateFailed(f"Invalid response from API: {error}") from error