mirror of
https://github.com/home-assistant/core.git
synced 2025-07-20 11:47:06 +00:00
Avoid circular import in Storage.async_delay_save (#111086)
This commit is contained in:
parent
d6fac87876
commit
1de83140ab
@ -108,7 +108,7 @@ class Store(Generic[_T]):
|
||||
self.hass = hass
|
||||
self._private = private
|
||||
self._data: dict[str, Any] | None = None
|
||||
self._unsub_delay_listener: CALLBACK_TYPE | None = None
|
||||
self._unsub_delay_listener: asyncio.TimerHandle | None = None
|
||||
self._unsub_final_write_listener: CALLBACK_TYPE | None = None
|
||||
self._write_lock = asyncio.Lock()
|
||||
self._load_task: asyncio.Future[_T | None] | None = None
|
||||
@ -279,9 +279,6 @@ class Store(Generic[_T]):
|
||||
delay: float = 0,
|
||||
) -> None:
|
||||
"""Save data with an optional delay."""
|
||||
# pylint: disable-next=import-outside-toplevel
|
||||
from .event import async_call_later
|
||||
|
||||
self._data = {
|
||||
"version": self.version,
|
||||
"minor_version": self.minor_version,
|
||||
@ -295,10 +292,16 @@ class Store(Generic[_T]):
|
||||
if self.hass.state is CoreState.stopping:
|
||||
return
|
||||
|
||||
self._unsub_delay_listener = async_call_later(
|
||||
self.hass, delay, self._async_callback_delayed_write
|
||||
# We use call_later directly here to avoid a circular import
|
||||
self._unsub_delay_listener = self.hass.loop.call_later(
|
||||
delay, self._async_schedule_callback_delayed_write
|
||||
)
|
||||
|
||||
@callback
|
||||
def _async_schedule_callback_delayed_write(self) -> None:
|
||||
"""Schedule the delayed write in a task."""
|
||||
self.hass.async_create_task(self._async_callback_delayed_write())
|
||||
|
||||
@callback
|
||||
def _async_ensure_final_write_listener(self) -> None:
|
||||
"""Ensure that we write if we quit before delay has passed."""
|
||||
@ -318,10 +321,10 @@ class Store(Generic[_T]):
|
||||
def _async_cleanup_delay_listener(self) -> None:
|
||||
"""Clean up a delay listener."""
|
||||
if self._unsub_delay_listener is not None:
|
||||
self._unsub_delay_listener()
|
||||
self._unsub_delay_listener.cancel()
|
||||
self._unsub_delay_listener = None
|
||||
|
||||
async def _async_callback_delayed_write(self, _now):
|
||||
async def _async_callback_delayed_write(self) -> None:
|
||||
"""Handle a delayed write callback."""
|
||||
# catch the case where a call is scheduled and then we stop Home Assistant
|
||||
if self.hass.state is CoreState.stopping:
|
||||
|
Loading…
x
Reference in New Issue
Block a user