diff --git a/src/admin/tasks.py b/src/admin/tasks.py index 0545c0c..68aeb2f 100644 --- a/src/admin/tasks.py +++ b/src/admin/tasks.py @@ -1,6 +1,6 @@ """Period tasks related to emails.""" -from celery.decorators import periodic_task +from happening.tasks import periodic_task from datetime import timedelta from .models import Backup from django.core.management.commands import dumpdata, flush, loaddata diff --git a/src/emails/tasks.py b/src/emails/tasks.py index 7b400b6..9dddaf4 100644 --- a/src/emails/tasks.py +++ b/src/emails/tasks.py @@ -1,6 +1,6 @@ """Period tasks related to emails.""" from datetime import datetime -from celery.decorators import periodic_task +from happening.tasks import periodic_task from datetime import timedelta diff --git a/src/events/tasks.py b/src/events/tasks.py index 49fd6be..c7bef9c 100644 --- a/src/events/tasks.py +++ b/src/events/tasks.py @@ -1,6 +1,6 @@ """Period tasks related to events.""" -from celery.decorators import periodic_task +from happening.tasks import periodic_task from datetime import timedelta from .models import TicketOrder, WaitingListSubscription, TicketType from payments.models import Payment diff --git a/src/happening/plugins.py b/src/happening/plugins.py index 663578a..4e630a5 100644 --- a/src/happening/plugins.py +++ b/src/happening/plugins.py @@ -99,20 +99,6 @@ def plugin_enabled(plugin_id): return setting.enabled -def every(*o_args, **o_kwargs): - """Ensure that periodic tasks are only executed for enabled plugins.""" - def every_inner(f): - from periodically.decorators import every as periodically_every - - def every_inner_inner(*args, **kwargs): - # First check if this plugin is enabled, if not return - plugin_id = inspect.getmodule(f).__name__[:-len(".periodictasks")] - if not plugin_enabled(plugin_id): - return False - return f(*args, **kwargs) - return periodically_every(*o_args, **o_kwargs)(every_inner_inner) - return every_inner - registered_middlewares = {} diff --git a/src/happening/tasks.py b/src/happening/tasks.py index 64d3af2..f2757d8 100644 --- a/src/happening/tasks.py +++ b/src/happening/tasks.py @@ -2,7 +2,27 @@ from happening.storage import storage from datetime import timedelta from django.utils import timezone -from celery.decorators import periodic_task +from celery.decorators import periodic_task as celery_periodic_task +import inspect +from happening.plugins import plugin_enabled + + +def periodic_task(*o_args, **o_kwargs): + """Schedule a task to run periodically.""" + def periodic_task_inner(f): + plugin_id = inspect.getmodule(f).__name__[:-len(".tasks")] + + def periodic_task_inner_inner(*args, **kwargs): + # First check if this plugin is enabled, if not return + if not plugin_enabled(plugin_id): + return False + return f() + if 'name' not in o_kwargs: + o_kwargs['name'] = f.__name__ + o_kwargs['name'] = '%s.tasks.%s' % (plugin_id, o_kwargs['name']) + return celery_periodic_task(*o_args, **o_kwargs)( + periodic_task_inner_inner) + return periodic_task_inner @periodic_task(run_every=timedelta(days=1))