mirror of
https://github.com/evennia/evennia.git
synced 2026-03-16 21:06:30 +01:00
task handler call_task, Task.call methods created
task handler call_task, Task.call methods created Added unit tests for these methods. All evennia unit tests pass
This commit is contained in:
parent
0b7cae600a
commit
3cc14e2e4c
2 changed files with 41 additions and 1 deletions
|
|
@ -365,6 +365,26 @@ class TaskHandler(object):
|
|||
self.save()
|
||||
return True
|
||||
|
||||
def call_task(self, task_id):
|
||||
"""
|
||||
Call the callback of a task.
|
||||
Leave the task unaffected otherwise.
|
||||
This does not use the task's deferred instance.
|
||||
The only requirement is that the task exist in task handler.
|
||||
|
||||
Args:
|
||||
task_id (int): an existing task ID.
|
||||
|
||||
Returns:
|
||||
False (bool): if the task does not exist in task handler.
|
||||
?: The return of the task's callback.
|
||||
"""
|
||||
if task_id in self.tasks:
|
||||
date, callback, args, kwargs, persistent, d = self.tasks.get(task_id)
|
||||
else: # the task does not exist
|
||||
return False
|
||||
return callback(*args, **kwargs)
|
||||
|
||||
def do_task(self, task_id):
|
||||
"""
|
||||
Execute the task (call its callback).
|
||||
|
|
@ -394,7 +414,7 @@ class TaskHandler(object):
|
|||
else: # the task does not exist
|
||||
return False
|
||||
if d: # it is remotely possible for a task to not have a deferral
|
||||
if not d.called: # the task has not been called yet
|
||||
if not d.called: # the task's deferred has not been called yet
|
||||
d.cancel() # cancel the automated callback
|
||||
else: # this task has no deferral, and should not be called
|
||||
return False
|
||||
|
|
@ -455,6 +475,7 @@ class Task:
|
|||
pause(): Pause the callback of a task.
|
||||
unpause(): Process all callbacks made since pause() was called.
|
||||
do_task(): Execute the task (call its callback).
|
||||
call(): Call the callback of this task.
|
||||
remove(): Remove a task without executing it.
|
||||
cancel(): Stop a task from automatically executing.
|
||||
active(): Check if a task is active (has not been called yet).
|
||||
|
|
@ -530,6 +551,19 @@ class Task:
|
|||
"""
|
||||
return TASK_HANDLER.do_task(self.task_id)
|
||||
|
||||
def call(self):
|
||||
"""
|
||||
Call the callback of this task.
|
||||
Leave the task unaffected otherwise.
|
||||
This does not use the task's deferred instance.
|
||||
The only requirement is that the task exist in task handler.
|
||||
|
||||
Returns:
|
||||
False (bool): if the task does not exist in task handler.
|
||||
?: The return of the task's callback.
|
||||
"""
|
||||
return TASK_HANDLER.call_task(self.task_id)
|
||||
|
||||
def remove(self):
|
||||
"""
|
||||
Remove a task without executing it.
|
||||
|
|
|
|||
|
|
@ -333,8 +333,14 @@ class TestDelay(EvenniaTest):
|
|||
self.char1.ndb.dummy_var = False
|
||||
# test a persistent deferral, that completes after delay time
|
||||
t = utils.delay(timedelay, dummy_func, self.char1.dbref, persistent=True)
|
||||
# call the task early to test Task.call and TaskHandler.call_task
|
||||
result = t.call()
|
||||
self.assertTrue(result)
|
||||
del result
|
||||
self.assertEqual(self.char1.ndb.dummy_var, 'dummy_func ran')
|
||||
self.assertTrue(_TASK_HANDLER.active(t.get_id())) # test Task.get_id
|
||||
self.assertTrue(t.active())
|
||||
self.char1.ndb.dummy_var = False # Set variable to continue completion after delay time test.
|
||||
_TASK_HANDLER.clock.advance(timedelay) # make time pass
|
||||
self.assertTrue(t.called) # test Task.called property
|
||||
self.assertEqual(self.char1.ndb.dummy_var, 'dummy_func ran')
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue