bbot_server/applets/_base.py:234: in register_watchdog_tasks
task = broker.register_task(method, **kwargs)
../../../.cache/pypoetry/virtualenvs/bbot-server-DmHQwTaK-py3.13/lib/python3.13/site-packages/taskiq/abc/broker.py:377: in register_task
return self.task(task_name=task_name, **labels)(func)
../../../.cache/pypoetry/virtualenvs/bbot-server-DmHQwTaK-py3.13/lib/python3.13/site-packages/taskiq/abc/broker.py:331: in inner
self.decorator_class(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = AsyncTaskiqDecoratedTask(bbot_server.applets.events:archive_events_task), broker = <taskiq_nats.broker.NatsBroker object at 0x70a16466cec0>
task_name = 'bbot_server.applets.events:archive_events_task'
original_func = <bound method EventsApplet.archive_events_task of <bbot_server.applets.events.EventsApplet object at 0x70a16609c050>>, labels = {'schedule': [{'cron': '0 0 * * *'}]}
def __init__(
self,
broker: "AsyncBroker",
task_name: str,
original_func: Callable[_FuncParams, _ReturnType],
labels: Dict[str, Any],
) -> None:
self.broker = broker
self.task_name = task_name
self.original_func = original_func
self.labels = labels
# This is a hack to make ProcessPoolExecutor work
# with decorated functions.
#
# The problem is that when we decorate a function
# it becomes a new class. This class has the same
# name as the original function.
#
# When receiver sends original function to another
# process, it will have the same name as the decorated
# class. This will cause an error, because ProcessPoolExecutor
# uses `__name__` and `__qualname__` attributes to
# import functions from other processes and then it verifies
# that the function is the same as the original one.
#
# This hack renames the original function and injects
# it back to the module where it was defined.
# This way ProcessPoolExecutor will be able to import
# the function by it's name and verify its correctness.
new_name = f"{original_func.__name__}__taskiq_original"
> self.original_func.__name__ = new_name
E AttributeError: 'method' object has no attribute '__name__' and no __dict__ for setting new attributes. Did you mean: '__ne__'?
../../../.cache/pypoetry/virtualenvs/bbot-server-DmHQwTaK-py3.13/lib/python3.13/site-packages/taskiq/decor.py:79: AttributeError
After updating to
0.11.16, registering a method as a task produces anAttributeError: