Commit 4ee3275b authored by Robert's avatar Robert
Browse files

Refactor task execution code, remove (A)SYNC_EMAIL_BACKEND. Failed tasks can...

Refactor task execution code, remove (A)SYNC_EMAIL_BACKEND. Failed tasks can be repeated by calling management command repeat_tasks.
parent e20614fb
Loading
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -256,8 +256,11 @@ CSP_STYLE_SRC = ("'self'", "'unsafe-inline'")
# grouprise Repeatable Tasks (grouprise.core)

GROUPRISE_REPEATABLE_TASKS = {
    'content2.Content': 'grouprise.features.content.tasks.send_content_notifications',
    'contributions.Contribution': 'grouprise.features.contributions.tasks.send_contribution_notifications',
    'content2.Content':
    'grouprise.features.content.notifications.send_content_notifications',

    'contributions.Contribution':
    'grouprise.features.contributions.notifications.send_contribution_notifications',
}


+2 −7
Original line number Diff line number Diff line
from django.conf import settings
from django.core.management.base import BaseCommand
from django.utils.module_loading import import_string

from grouprise.core.models import RepeatableTask
from grouprise.core.tasks import auto_task


def repeat_tasks(task_queryset):
    for task in task_queryset:
        obj = task.task_parameter
        label = obj._meta.label
        method_name = settings.GROUPRISE_REPEATABLE_TASKS[label]
        task_method = import_string(method_name)
        try:
            task_method(obj)
            auto_task(task.task_parameter)
        finally:
            task.delete()

+0 −7
Original line number Diff line number Diff line
@@ -8,7 +8,6 @@ from django.apps import apps
from django.conf import settings
from django.contrib.sites.models import Site
from django.core import mail
from django.core.mail import get_connection
from django.template import loader

from grouprise.core.models import PermissionToken
@@ -194,11 +193,5 @@ class Notification:
        for file_name in self.get_attachments():
            message.attach_file(file_name)

        # optional connection switch
        if kwargs.get('use_sync_email_backend'):
            message.connection = get_connection(settings.SYNC_EMAIL_BACKEND)
        elif kwargs.get('use_async_email_backend'):
            message.connection = get_connection(settings.ASYNC_EMAIL_BACKEND)

        # we don't expect errors when sending mails because we just pass mails to django-mailer
        message.send()
+18 −0
Original line number Diff line number Diff line
from django.conf import settings
from django.utils.module_loading import import_string
from huey.contrib.djhuey import db_task

from grouprise.core.models import RepeatableTask


@db_task()
def auto_task(model):
    task = RepeatableTask.objects.create(
            content_type=model.content_type, object_id=model.id)

    model_class_label = model._meta.label
    task_method_name = settings.GROUPRISE_REPEATABLE_TASKS[model_class_label]
    task_method = import_string(task_method_name)
    task_method(model)

    task.delete()
+4 −0
Original line number Diff line number Diff line
@@ -76,3 +76,7 @@ class ContentCreated(grouprise.core.notifications.Notification):
        if self.association:
            return reverse('content-permalink', args=(self.association.pk,))
        return super().get_url()


def send_content_notifications(instance):
    ContentCreated.send_all(instance)
Loading