|
20 | 20 |
|
21 | 21 | from taskiq.abc.middleware import TaskiqMiddleware |
22 | 22 | from taskiq.abc.serializer import TaskiqSerializer |
| 23 | +from taskiq.task_gen import TaskiqTaskGenerator |
23 | 24 | from taskiq.acks import AckableMessage |
24 | 25 | from taskiq.decor import AsyncTaskiqDecoratedTask |
25 | 26 | from taskiq.events import TaskiqEvents |
@@ -301,64 +302,23 @@ def task( # type: ignore[misc] |
301 | 302 |
|
302 | 303 | :returns: decorator function or AsyncTaskiqDecoratedTask. |
303 | 304 | """ |
304 | | - |
305 | | - def make_decorated_task( |
306 | | - inner_labels: dict[str, str | int], |
307 | | - inner_task_name: str | None = None, |
308 | | - ) -> Callable[ |
309 | | - [Callable[_FuncParams, _ReturnType]], |
310 | | - AsyncTaskiqDecoratedTask[_FuncParams, _ReturnType], |
311 | | - ]: |
312 | | - def inner( |
313 | | - func: Callable[_FuncParams, _ReturnType], |
314 | | - ) -> AsyncTaskiqDecoratedTask[_FuncParams, _ReturnType]: |
315 | | - nonlocal inner_task_name |
316 | | - if inner_task_name is None: |
317 | | - fmodule = func.__module__ |
318 | | - if fmodule == "__main__": # pragma: no cover |
319 | | - fmodule = ".".join( |
320 | | - os.path.normpath(sys.argv[0]) |
321 | | - .removesuffix(".py") |
322 | | - .split(os.path.sep), |
323 | | - ) |
324 | | - fname = func.__name__ |
325 | | - if fname == "<lambda>": |
326 | | - fname = f"lambda_{uuid4().hex}" |
327 | | - inner_task_name = f"{fmodule}:{fname}" |
328 | | - wrapper = wraps(func) |
329 | | - |
330 | | - sign = get_type_hints(func) |
331 | | - return_type = None |
332 | | - if "return" in sign: |
333 | | - return_type = sign["return"] |
334 | | - |
335 | | - decorated_task = wrapper( |
336 | | - self.decorator_class( |
337 | | - broker=self, |
338 | | - original_func=func, |
339 | | - labels=inner_labels, |
340 | | - task_name=inner_task_name, |
341 | | - return_type=return_type, # type: ignore |
342 | | - ), |
343 | | - ) |
344 | | - |
345 | | - self._register_task(decorated_task.task_name, decorated_task) # type: ignore |
346 | | - |
347 | | - return decorated_task # type: ignore |
348 | | - |
349 | | - return inner |
| 305 | + warnings.warn( |
| 306 | + "Tasks are not independent from brokers. " |
| 307 | + "Use `taskiq.task` as a decorator instead.", |
| 308 | + TaskiqDeprecationWarning, |
| 309 | + stacklevel=2, |
| 310 | + ) |
| 311 | + generator = TaskiqTaskGenerator().labels(**labels).broker(self) |
350 | 312 |
|
351 | 313 | if callable(task_name): |
352 | 314 | # This is an edge case, |
353 | 315 | # when decorator called without parameters. |
354 | | - return make_decorated_task( |
355 | | - inner_labels=labels or {}, |
356 | | - )(task_name) |
| 316 | + return generator(task_name) |
357 | 317 |
|
358 | | - return make_decorated_task( |
359 | | - inner_task_name=task_name, |
360 | | - inner_labels=labels or {}, |
361 | | - ) |
| 318 | + if task_name: |
| 319 | + generator = generator.name(task_name) |
| 320 | + |
| 321 | + return generator |
362 | 322 |
|
363 | 323 | def register_task( |
364 | 324 | self, |
@@ -534,9 +494,10 @@ def _register_task( |
534 | 494 | raise TaskBrokerMismatchError(broker=task.broker) |
535 | 495 | self.local_task_registry[task_name] = task |
536 | 496 |
|
537 | | - async def __aenter__(self) -> None: |
| 497 | + async def __aenter__(self) -> "Self": |
538 | 498 | """Starts the broker as ctx manager.""" |
539 | 499 | await self.startup() |
| 500 | + return self |
540 | 501 |
|
541 | 502 | async def __aexit__(self, *args: object, **kwargs: Any) -> None: |
542 | 503 | """Shuts down the broker as ctx manager.""" |
|
0 commit comments