15
15
16
16
from typing_extensions import ParamSpec , Self
17
17
18
+ from taskiq .abc .middleware import TaskiqMiddleware
18
19
from taskiq .decor import AsyncTaskiqDecoratedTask
19
20
from taskiq .utils import remove_suffix
20
21
@@ -37,6 +38,7 @@ def __init__(self, broker: "AsyncBroker") -> None:
37
38
self ._broker = broker
38
39
self ._task_name : Optional [str ] = None
39
40
self ._labels : Dict [str , Any ] = {}
41
+ self ._middlewares : list [TaskiqMiddleware ] = []
40
42
41
43
def name (self , name : str ) -> Self :
42
44
"""Assign custom name to the task."""
@@ -48,6 +50,11 @@ def labels(self, **labels: Any) -> Self:
48
50
self ._labels = labels
49
51
return self
50
52
53
+ def middlewares (self , * middlewares : TaskiqMiddleware ) -> Self :
54
+ """Assign custom middlewares to the task."""
55
+ self ._middlewares = list (middlewares )
56
+ return self
57
+
51
58
def make_task (
52
59
self ,
53
60
task_name : str ,
@@ -59,8 +66,21 @@ def make_task(
59
66
original_func = func ,
60
67
labels = self ._labels ,
61
68
task_name = task_name ,
69
+ extra_middlewares = self ._middlewares ,
62
70
)
63
71
72
+ def __resolve_name (self , func : Callable [..., Any ]) -> str :
73
+ """Resolve name of the function."""
74
+ fmodule = func .__module__
75
+ if fmodule == "__main__" : # pragma: no cover
76
+ fmodule = "." .join (
77
+ remove_suffix (sys .argv [0 ], ".py" ).split (os .path .sep ),
78
+ )
79
+ fname = func .__name__
80
+ if fname == "<lambda>" :
81
+ fname = f"lambda_{ uuid4 ().hex } "
82
+ return f"{ fmodule } :{ fname } "
83
+
64
84
@overload
65
85
def __call__ (
66
86
self ,
@@ -131,15 +151,7 @@ def inner(
131
151
) -> AsyncTaskiqDecoratedTask [_FuncParams , _ReturnType ]:
132
152
inner_task_name = self ._task_name
133
153
if inner_task_name is None :
134
- fmodule = func .__module__
135
- if fmodule == "__main__" : # pragma: no cover
136
- fmodule = "." .join (
137
- remove_suffix (sys .argv [0 ], ".py" ).split (os .path .sep ),
138
- )
139
- fname = func .__name__
140
- if fname == "<lambda>" :
141
- fname = f"lambda_{ uuid4 ().hex } "
142
- inner_task_name = f"{ fmodule } :{ fname } "
154
+ inner_task_name = self .__resolve_name (func )
143
155
144
156
wrapper = wraps (func )
145
157
decorated_task = wrapper (
0 commit comments