Newer
Older
Eliot Berriot
committed
from __future__ import absolute_import
import functools
import logging
import celery.app.task
Eliot Berriot
committed
from django.apps import AppConfig
from django.conf import settings
logger = logging.getLogger("celery")
Eliot Berriot
committed
if not settings.configured:
# set the default Django settings module for the 'celery' program.
Eliot Berriot
committed
"DJANGO_SETTINGS_MODULE", "config.settings.production"
Eliot Berriot
committed
app = celery.Celery("funkwhale_api")
Eliot Berriot
committed
@celery.signals.task_failure.connect
def process_failure(sender, task_id, exception, args, kwargs, traceback, einfo, **kw):
print("[celery] Error during task {}: {}".format(task_id, einfo.exception))
tb.print_exc()
Eliot Berriot
committed
class CeleryConfig(AppConfig):
name = "funkwhale_api.taskapp"
verbose_name = "Celery Config"
Eliot Berriot
committed
def ready(self):
# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object("django.conf:settings", namespace="CELERY")
Eliot Berriot
committed
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS, force=True)
def require_instance(model_or_qs, parameter_name, id_kwarg_name=None):
def decorator(function):
@functools.wraps(function)
def inner(*args, **kwargs):
try:
instance = model_or_qs.get(pk=pk)
except AttributeError:
instance = model_or_qs.objects.get(pk=pk)
kwargs[parameter_name] = instance
return function(*args, **kwargs)
return inner
return decorator