diff --git a/tasks/basic.py b/tasks/basic.py index eff88f7..fdb1cdc 100644 --- a/tasks/basic.py +++ b/tasks/basic.py @@ -18,7 +18,28 @@ def __init__(self, seconds: int, *args, **kwargs): def run(self): time.sleep(self.seconds) return self.seconds + +class SleepUntilTask(Task): + def __init__(self, target_datetime: datetime, *args, **kwargs): + self.target_datetime = target_datetime + super().__init__(*args, **kwargs) + + def run(self): + # Get current time + current_time = datetime.now() + + # Calculate the number of seconds to sleep + sleep_seconds = (self.target_datetime - current_time).total_seconds() + + # Only sleep if the target time is in the future + if sleep_seconds > 0: + print(f"Sleeping for {sleep_seconds:.2f} seconds until {self.target_datetime}") + time.sleep(sleep_seconds) + return sleep_seconds + else: + print("The target time is in the past. No need to sleep.") + return 0 class ShellCommand(Task): def __init__(self, command: list[str], *args, **kwargs):