Skip to content

Commit

Permalink
Add support for delay() and eta() in .s() and .then()
Browse files Browse the repository at this point in the history
Refs #720
  • Loading branch information
coleifer committed Mar 8, 2023
1 parent cc439d5 commit e01f71b
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 0 deletions.
8 changes: 8 additions & 0 deletions huey/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -859,7 +859,15 @@ def call_local(self, *args, **kwargs):
return self.func(*args, **kwargs)

def s(self, *args, **kwargs):
eta = kwargs.pop('eta', None)
delay = kwargs.pop('delay', None)
if delay is not None and isinstance(delay, datetime.timedelta):
delay = delay.total_seconds()
if eta is not None or delay is not None:
eta = normalize_time(eta, delay, self.huey.utc)

return self.task_class(args, kwargs,
eta=eta,
retries=kwargs.pop('retries', None),
retry_delay=kwargs.pop('retry_delay', None),
priority=kwargs.pop('priority', None),
Expand Down
22 changes: 22 additions & 0 deletions huey/tests/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,28 @@ def task_a(n):
self.assertEqual(len(sched), 1)
self.assertEqual(sched[0], task)

def test_schedule_s(self):
@self.huey.task()
def add(a, b):
return a + b

task = add.s((1, 2), delay=10)
task = task.then(add, (3,), delay=20)
self.huey.execute(task)

sched = self.huey.scheduled()
self.assertEqual(len(sched), 1)
self.assertEqual(sched[0], task)

t10 = datetime.datetime.now() + datetime.timedelta(seconds=10)
self.assertFalse(self.huey.ready_to_run(task))
self.assertTrue(self.huey.ready_to_run(task, t10))

t20 = datetime.datetime.now() + datetime.timedelta(seconds=20)
oc = task.on_complete
self.assertFalse(self.huey.ready_to_run(oc, t10))
self.assertTrue(self.huey.ready_to_run(oc, t20))

def test_revoke_task(self):
state = {}
@self.huey.task()
Expand Down

0 comments on commit e01f71b

Please sign in to comment.