mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 13:17:32 +00:00
Refactor async_call_at and async_call_later event helpers to avoid creating closures (#99469)
This commit is contained in:
parent
1cd0cb4537
commit
5f487b5d85
@ -1432,6 +1432,13 @@ def async_track_point_in_utc_time(
|
|||||||
track_point_in_utc_time = threaded_listener_factory(async_track_point_in_utc_time)
|
track_point_in_utc_time = threaded_listener_factory(async_track_point_in_utc_time)
|
||||||
|
|
||||||
|
|
||||||
|
def _run_async_call_action(
|
||||||
|
hass: HomeAssistant, job: HassJob[[datetime], Coroutine[Any, Any, None] | None]
|
||||||
|
) -> None:
|
||||||
|
"""Run action."""
|
||||||
|
hass.async_run_hass_job(job, time_tracker_utcnow())
|
||||||
|
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
@bind_hass
|
@bind_hass
|
||||||
def async_call_at(
|
def async_call_at(
|
||||||
@ -1441,26 +1448,12 @@ def async_call_at(
|
|||||||
loop_time: float,
|
loop_time: float,
|
||||||
) -> CALLBACK_TYPE:
|
) -> CALLBACK_TYPE:
|
||||||
"""Add a listener that is called at <loop_time>."""
|
"""Add a listener that is called at <loop_time>."""
|
||||||
|
|
||||||
@callback
|
|
||||||
def run_action(job: HassJob[[datetime], Coroutine[Any, Any, None] | None]) -> None:
|
|
||||||
"""Call the action."""
|
|
||||||
hass.async_run_hass_job(job, time_tracker_utcnow())
|
|
||||||
|
|
||||||
job = (
|
job = (
|
||||||
action
|
action
|
||||||
if isinstance(action, HassJob)
|
if isinstance(action, HassJob)
|
||||||
else HassJob(action, f"call_at {loop_time}")
|
else HassJob(action, f"call_at {loop_time}")
|
||||||
)
|
)
|
||||||
cancel_callback = hass.loop.call_at(loop_time, run_action, job)
|
return hass.loop.call_at(loop_time, _run_async_call_action, hass, job).cancel
|
||||||
|
|
||||||
@callback
|
|
||||||
def unsub_call_later_listener() -> None:
|
|
||||||
"""Cancel the call_later."""
|
|
||||||
assert cancel_callback is not None
|
|
||||||
cancel_callback.cancel()
|
|
||||||
|
|
||||||
return unsub_call_later_listener
|
|
||||||
|
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
@ -1474,26 +1467,13 @@ def async_call_later(
|
|||||||
"""Add a listener that is called in <delay>."""
|
"""Add a listener that is called in <delay>."""
|
||||||
if isinstance(delay, timedelta):
|
if isinstance(delay, timedelta):
|
||||||
delay = delay.total_seconds()
|
delay = delay.total_seconds()
|
||||||
|
|
||||||
@callback
|
|
||||||
def run_action(job: HassJob[[datetime], Coroutine[Any, Any, None] | None]) -> None:
|
|
||||||
"""Call the action."""
|
|
||||||
hass.async_run_hass_job(job, time_tracker_utcnow())
|
|
||||||
|
|
||||||
job = (
|
job = (
|
||||||
action
|
action
|
||||||
if isinstance(action, HassJob)
|
if isinstance(action, HassJob)
|
||||||
else HassJob(action, f"call_later {delay}")
|
else HassJob(action, f"call_later {delay}")
|
||||||
)
|
)
|
||||||
cancel_callback = hass.loop.call_at(hass.loop.time() + delay, run_action, job)
|
loop = hass.loop
|
||||||
|
return loop.call_at(loop.time() + delay, _run_async_call_action, hass, job).cancel
|
||||||
@callback
|
|
||||||
def unsub_call_later_listener() -> None:
|
|
||||||
"""Cancel the call_later."""
|
|
||||||
assert cancel_callback is not None
|
|
||||||
cancel_callback.cancel()
|
|
||||||
|
|
||||||
return unsub_call_later_listener
|
|
||||||
|
|
||||||
|
|
||||||
call_later = threaded_listener_factory(async_call_later)
|
call_later = threaded_listener_factory(async_call_later)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user