@@ -128,10 +128,10 @@ def __init__(
128128 logger ,
129129 cooldown = REQUEST_REFRESH_DEFAULT_COOLDOWN ,
130130 immediate = REQUEST_REFRESH_DEFAULT_IMMEDIATE ,
131- function = self .async_refresh ,
131+ function = self ._async_refresh ,
132132 )
133133 else :
134- request_refresh_debouncer .function = self .async_refresh
134+ request_refresh_debouncer .function = self ._async_refresh
135135
136136 self ._debounced_refresh = request_refresh_debouncer
137137
@@ -277,7 +277,8 @@ def __wrap_handle_refresh_interval(self) -> None:
277277 async def _handle_refresh_interval (self , _now : datetime | None = None ) -> None :
278278 """Handle a refresh interval occurrence."""
279279 self ._unsub_refresh = None
280- await self ._async_refresh (log_failures = True , scheduled = True )
280+ async with self ._debounced_refresh .async_lock ():
281+ await self ._async_refresh (log_failures = True , scheduled = True )
281282
282283 async def async_request_refresh (self ) -> None :
283284 """Request a refresh.
@@ -295,6 +296,16 @@ async def _async_update_data(self) -> _DataT:
295296 async def async_config_entry_first_refresh (self ) -> None :
296297 """Refresh data for the first time when a config entry is setup.
297298
299+ Will automatically raise ConfigEntryNotReady if the refresh
300+ fails. Additionally logging is handled by config entry setup
301+ to ensure that multiple retries do not cause log spam.
302+ """
303+ async with self ._debounced_refresh .async_lock ():
304+ await self ._async_config_entry_first_refresh ()
305+
306+ async def _async_config_entry_first_refresh (self ) -> None :
307+ """Refresh data for the first time when a config entry is setup.
308+
298309 Will automatically raise ConfigEntryNotReady if the refresh
299310 fails. Additionally logging is handled by config entry setup
300311 to ensure that multiple retries do not cause log spam.
@@ -364,7 +375,8 @@ async def _async_setup(self) -> None:
364375
365376 async def async_refresh (self ) -> None :
366377 """Refresh data and log errors."""
367- await self ._async_refresh (log_failures = True )
378+ async with self ._debounced_refresh .async_lock ():
379+ await self ._async_refresh (log_failures = True )
368380
369381 async def _async_refresh ( # noqa: C901
370382 self ,
0 commit comments