Я использую dramatiq для своей очереди задач, которая предлагает декоратору @dramatiq.actor
для украшения функции как задачи. Я попытался написать свой собственный декоратор, который упаковывает декоратор @dramatiq.actor
, чтобы я мог добавить аргумент по умолчанию к декоратору @dramatiq.actor
, который применяется ко всем задачам (аргумент, о котором я говорю, это priority=100
).
По какой-то причине я получаю следующую ошибку:
TypeError: foobar() takes 1 positional argument but 3 were given
Если я переключаю свой собственный @task
декоратор на @dramatiq.actor
, это работает, так что я думаю, что мой собственный декоратор не верен но я не могу определить свою ошибку.
decorators.py
def task(func=None, **kwargs):
def decorator(func):
@wraps(func)
@dramatiq.actor(priority=100, **kwargs)
def wrapper(*args, **kwargs):
return func(*args, **kwargs)
return wrapper
if func is None:
return decorator
return decorator(func)
tasks.py
@task
def foobar(entry_pk):
...
views.py
foobar.send_with_options(args=(entry.pk,))