From 40f557903d3cf079dcc8c524cfad85d77e9073c1 Mon Sep 17 00:00:00 2001 From: megalaren <67578764+megalaren@users.noreply.github.com> Date: Tue, 4 Feb 2025 03:41:06 +0300 Subject: [PATCH] Fix task delay for specific time with milliseconds (#404) Co-authored-by: Aleksei Briushinin --- taskiq/cli/scheduler/run.py | 7 +++++-- tests/cli/scheduler/test_task_delays.py | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/taskiq/cli/scheduler/run.py b/taskiq/cli/scheduler/run.py index 9155324d..6fa3c091 100644 --- a/taskiq/cli/scheduler/run.py +++ b/taskiq/cli/scheduler/run.py @@ -94,12 +94,15 @@ def get_task_delay(task: ScheduledTask) -> Optional[int]: return 0 return None if task.time is not None: - task_time = to_tz_aware(task.time).replace(microsecond=0) + task_time = to_tz_aware(task.time) if task_time <= now: return 0 one_min_ahead = (now + timedelta(minutes=1)).replace(second=1, microsecond=0) if task_time <= one_min_ahead: - return int((task_time - now).total_seconds()) + delay = task_time - now + if delay.microseconds: + return int(delay.total_seconds()) + 1 + return int(delay.total_seconds()) return None diff --git a/tests/cli/scheduler/test_task_delays.py b/tests/cli/scheduler/test_task_delays.py index 7e48e210..1af3c783 100644 --- a/tests/cli/scheduler/test_task_delays.py +++ b/tests/cli/scheduler/test_task_delays.py @@ -124,3 +124,21 @@ def test_time_delay() -> None: ), ) assert delay is not None and delay == 15 + + +@freeze_time("2023-01-14 12:00:00.05") +def test_time_delay_with_milliseconds() -> None: + time = datetime.datetime.now(tz=pytz.UTC) + datetime.timedelta( + seconds=15, + milliseconds=150, + ) + delay = get_task_delay( + ScheduledTask( + task_name="", + labels={}, + args=[], + kwargs={}, + time=time, + ), + ) + assert delay is not None and delay == 16