File tree Expand file tree Collapse file tree 8 files changed +68
-6
lines changed Expand file tree Collapse file tree 8 files changed +68
-6
lines changed Original file line number Diff line number Diff line change @@ -61,9 +61,8 @@ async def handler(msg: str):
61
61
print (msg)
62
62
63
63
# taskiq-faststream scheduling
64
- from taskiq import TaskiqScheduler
65
64
from taskiq.schedule_sources import LabelScheduleSource
66
- from taskiq_faststream import BrokerWrapper
65
+ from taskiq_faststream import BrokerWrapper, StreamScheduler
67
66
68
67
# wrap FastStream object
69
68
taskiq_broker = BrokerWrapper(broker)
@@ -80,7 +79,7 @@ taskiq_broker.task(
80
79
)
81
80
82
81
# create scheduler object
83
- scheduler = TaskiqScheduler (
82
+ scheduler = StreamScheduler (
84
83
broker = taskiq_broker,
85
84
sources = [LabelScheduleSource(taskiq_broker)],
86
85
)
Original file line number Diff line number Diff line change @@ -71,10 +71,10 @@ test = [
71
71
dev = [
72
72
" taskiq-faststream[test]" ,
73
73
74
- " mypy==1.7.0 " ,
74
+ " mypy==1.7.1 " ,
75
75
" black==23.11.0" ,
76
76
" isort==5.12.0" ,
77
- " ruff==0.1.5 " ,
77
+ " ruff==0.1.6 " ,
78
78
" pyupgrade-directories==0.3.0" ,
79
79
" pre-commit==3.5.0" ,
80
80
]
Original file line number Diff line number Diff line change 1
1
"""FastStream - taskiq integration to schedule FastStream tasks."""
2
- __version__ = "0.1.4 "
2
+ __version__ = "0.1.5 "
Original file line number Diff line number Diff line change 1
1
from taskiq_faststream .broker import AppWrapper , BrokerWrapper
2
+ from taskiq_faststream .scheduler import StreamScheduler
2
3
3
4
__all__ = (
4
5
"BrokerWrapper" ,
6
+ "StreamScheduler" ,
5
7
"AppWrapper" ,
6
8
)
Original file line number Diff line number Diff line change 10
10
from taskiq .acks import AckableMessage
11
11
from taskiq .decor import AsyncTaskiqDecoratedTask
12
12
13
+ from taskiq_faststream .serializer import PatchedSerializer
13
14
from taskiq_faststream .types import ScheduledTask
14
15
from taskiq_faststream .utils import resolve_msg
15
16
@@ -32,6 +33,7 @@ class BrokerWrapper(AsyncBroker):
32
33
33
34
def __init__ (self , broker : BrokerAsyncUsecase [typing .Any , typing .Any ]) -> None :
34
35
super ().__init__ ()
36
+ self .serializer = PatchedSerializer ()
35
37
self .broker = broker
36
38
37
39
async def startup (self ) -> None :
@@ -107,6 +109,7 @@ class AppWrapper(BrokerWrapper):
107
109
108
110
def __init__ (self , app : FastStream ) -> None :
109
111
super (BrokerWrapper , self ).__init__ ()
112
+ self .serializer = PatchedSerializer ()
110
113
self .app = app
111
114
112
115
async def startup (self ) -> None :
Original file line number Diff line number Diff line change
1
+ from typing import Any
2
+
3
+ from taskiq .kicker import AsyncKicker , _FuncParams , _ReturnType
4
+ from taskiq .message import TaskiqMessage
5
+
6
+
7
+ class LabelRespectKicker (AsyncKicker [_FuncParams , _ReturnType ]):
8
+ """Patched kicker doesn't cast labels to str."""
9
+
10
+ def _prepare_message (self , * args : Any , ** kwargs : Any ) -> TaskiqMessage :
11
+ msg = super ()._prepare_message (* args , ** kwargs )
12
+ msg .labels = self .labels
13
+ return msg
Original file line number Diff line number Diff line change
1
+ from typing import TYPE_CHECKING
2
+
3
+ from taskiq .scheduler .scheduled_task import ScheduledTask
4
+ from taskiq .scheduler .scheduler import TaskiqScheduler as Scheduler
5
+ from taskiq .utils import maybe_awaitable
6
+
7
+ from taskiq_faststream .kicker import LabelRespectKicker
8
+
9
+ if TYPE_CHECKING : # pragma: no cover
10
+ from taskiq .abc .schedule_source import ScheduleSource
11
+
12
+
13
+ class StreamScheduler (Scheduler ):
14
+ """Patched scheduler with custom kicker."""
15
+
16
+ async def on_ready (self , source : "ScheduleSource" , task : ScheduledTask ) -> None :
17
+ """
18
+ This method is called when task is ready to be enqueued.
19
+
20
+ It's triggered on proper time depending on `task.cron` or `task.time` attribute.
21
+ :param task: task to send
22
+ """
23
+ await maybe_awaitable (source .pre_send (task ))
24
+ await LabelRespectKicker (task .task_name , self .broker , task .labels ).kiq (
25
+ * task .args ,
26
+ ** task .kwargs ,
27
+ )
28
+ await maybe_awaitable (source .post_send (task ))
Original file line number Diff line number Diff line change
1
+ from typing import Any
2
+
3
+ from taskiq .serializers .json_serializer import JSONSerializer
4
+
5
+
6
+ class PatchedSerializer (JSONSerializer ):
7
+ """Patched serializer removes labels."""
8
+
9
+ def dumpb (self , value : Any ) -> bytes :
10
+ """
11
+ Dumps taskiq message to some broker message format.
12
+
13
+ :param message: message to send.
14
+ :return: Dumped message.
15
+ """
16
+ del value ["labels" ]
17
+ return super ().dumpb (value )
You can’t perform that action at this time.
0 commit comments