1515
1616from typing_extensions import ParamSpec , Self
1717
18+ from taskiq .abc .middleware import TaskiqMiddleware
1819from taskiq .decor import AsyncTaskiqDecoratedTask
1920from taskiq .utils import remove_suffix
2021
@@ -37,6 +38,7 @@ def __init__(self, broker: "AsyncBroker") -> None:
3738 self ._broker = broker
3839 self ._task_name : Optional [str ] = None
3940 self ._labels : Dict [str , Any ] = {}
41+ self ._middlewares : list [TaskiqMiddleware ] = []
4042
4143 def name (self , name : str ) -> Self :
4244 """Assign custom name to the task."""
@@ -48,6 +50,11 @@ def labels(self, **labels: Any) -> Self:
4850 self ._labels = labels
4951 return self
5052
53+ def middlewares (self , * middlewares : TaskiqMiddleware ) -> Self :
54+ """Assign custom middlewares to the task."""
55+ self ._middlewares = list (middlewares )
56+ return self
57+
5158 def make_task (
5259 self ,
5360 task_name : str ,
@@ -59,8 +66,21 @@ def make_task(
5966 original_func = func ,
6067 labels = self ._labels ,
6168 task_name = task_name ,
69+ extra_middlewares = self ._middlewares ,
6270 )
6371
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+
6484 @overload
6585 def __call__ (
6686 self ,
@@ -131,15 +151,7 @@ def inner(
131151 ) -> AsyncTaskiqDecoratedTask [_FuncParams , _ReturnType ]:
132152 inner_task_name = self ._task_name
133153 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 )
143155
144156 wrapper = wraps (func )
145157 decorated_task = wrapper (
0 commit comments