Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 11 additions & 5 deletions tasktiger/task.py
Original file line number Diff line number Diff line change
Expand Up @@ -400,18 +400,24 @@ def from_id(self, tiger, queue, state, task_id, load_executions=0):
to indicate how many executions should be loaded (starting from the
latest). If the task doesn't exist, None is returned.
"""
pipeline = tiger.connection.pipeline()
pipeline.get(tiger._key('task', task_id))
pipeline.zscore(tiger._key(state, queue), task_id)
if load_executions:
pipeline = tiger.connection.pipeline()
pipeline.get(tiger._key('task', task_id))
pipeline.lrange(
tiger._key('task', task_id, 'executions'), -load_executions, -1
)
serialized_data, serialized_executions = pipeline.execute()
(
serialized_data,
is_queued,
serialized_executions,
) = pipeline.execute()
else:
serialized_data = tiger.connection.get(tiger._key('task', task_id))
serialized_data, is_queued = pipeline.execute()
serialized_executions = []

# XXX: No timestamp for now
if serialized_data:
if serialized_data and is_queued:
data = json.loads(serialized_data)
executions = [json.loads(e) for e in serialized_executions if e]
return Task(
Expand Down
28 changes: 28 additions & 0 deletions tests/test_task.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import pytest

from tasktiger import Task, TaskNotFound

from .tasks import simple_task
from .utils import get_tiger


class TestTaskFromId:
@pytest.fixture
def tiger(self):
return get_tiger()

@pytest.fixture
def queued_task(self, tiger):
return tiger.delay(simple_task)

def test_task_found(self, tiger, queued_task):
task = Task.from_id(tiger, "default", "queued", queued_task.id)
assert queued_task.id == task.id

def test_task_wrong_state(self, tiger, queued_task):
with pytest.raises(TaskNotFound):
Task.from_id(tiger, "default", "active", queued_task.id)

def test_task_wrong_queue(self, tiger, queued_task):
with pytest.raises(TaskNotFound):
Task.from_id(tiger, "other", "active", queued_task.id)