Skip to content

Commit cc3b3e6

Browse files
author
Amos
committed
add support for ProgressTracker
1 parent c58e3e8 commit cc3b3e6

2 files changed

Lines changed: 42 additions & 0 deletions

File tree

‎taskiq_nats/result_backend.py‎

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from taskiq import AsyncResultBackend, ResultGetError
99
from taskiq.abc.serializer import TaskiqSerializer
1010
from taskiq.compat import model_dump, model_validate
11+
from taskiq.depends.progress_tracker import TaskProgress
1112
from taskiq.result import TaskiqResult
1213
from taskiq.serializers import PickleSerializer
1314

@@ -123,3 +124,23 @@ async def get_result(
123124
taskiq_result.log = None
124125

125126
return taskiq_result
127+
128+
async def set_progress(
129+
self,
130+
task_id: str,
131+
progress: TaskProgress[Any],
132+
) -> None:
133+
await self.object_store.put(
134+
name=f"progress:{task_id}",
135+
data=self.serializer.dumpb(model_dump(progress)),
136+
)
137+
138+
async def get_progress(self, task_id: str) -> TaskProgress[Any] | None:
139+
try:
140+
result = await self.object_store.get(name=f"progress:{task_id}")
141+
except ObjectNotFoundError:
142+
return None
143+
return model_validate(
144+
TaskProgress[Any],
145+
self.serializer.loadb(result.data),
146+
)

‎tests/test_result_backend.py‎

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
import pytest
55
from taskiq import ResultGetError, TaskiqResult
6+
from taskiq.depends.progress_tracker import TaskProgress
67

78
from taskiq_nats import NATSObjectStoreResultBackend
89

@@ -146,3 +147,23 @@ async def test_success_backend_is_result_ready(
146147
)
147148

148149
assert await nats_result_backend.is_result_ready(task_id=task_id)
150+
151+
152+
async def test_set_and_get_progress(
153+
nats_result_backend: NATSObjectStoreResultBackend[_ReturnType],
154+
task_id: str,
155+
) -> None:
156+
progress = TaskProgress(state="PROGRESS", meta={"current": 5, "total": 10})
157+
await nats_result_backend.set_progress(task_id=task_id, progress=progress)
158+
result = await nats_result_backend.get_progress(task_id=task_id)
159+
assert result is not None
160+
assert result.state == "PROGRESS"
161+
assert result.meta == {"current": 5, "total": 10}
162+
163+
164+
async def test_get_progress_not_found(
165+
nats_result_backend: NATSObjectStoreResultBackend[_ReturnType],
166+
task_id: str,
167+
) -> None:
168+
result = await nats_result_backend.get_progress(task_id=task_id)
169+
assert result is None

0 commit comments

Comments
 (0)