funkwhale/api/funkwhale_api/taskapp/celery.py

48 wiersze
1.3 KiB
Python
Czysty Zwykły widok Historia

from __future__ import absolute_import
2018-06-10 08:55:16 +00:00
import functools
2018-06-10 08:55:16 +00:00
import os
from celery import Celery
from django.apps import AppConfig
from django.conf import settings
if not settings.configured:
# set the default Django settings module for the 'celery' program.
2018-06-09 13:36:16 +00:00
os.environ.setdefault(
"DJANGO_SETTINGS_MODULE", "config.settings.local"
) # pragma: no cover
2018-06-09 13:36:16 +00:00
app = Celery("funkwhale_api")
class CeleryConfig(AppConfig):
2018-06-09 13:36:16 +00:00
name = "funkwhale_api.taskapp"
verbose_name = "Celery Config"
def ready(self):
# Using a string here means the worker will not have to
# pickle the object when using Windows.
2018-06-09 13:36:16 +00:00
app.config_from_object("django.conf:settings", namespace="CELERY")
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS, force=True)
2018-01-07 21:13:32 +00:00
def require_instance(model_or_qs, parameter_name, id_kwarg_name=None):
def decorator(function):
@functools.wraps(function)
def inner(*args, **kwargs):
2018-06-09 13:36:16 +00:00
kw = id_kwarg_name or "_".join([parameter_name, "id"])
2018-01-07 21:13:32 +00:00
pk = kwargs.pop(kw)
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)
2018-06-09 13:36:16 +00:00
return inner
2018-06-09 13:36:16 +00:00
return decorator