tasks.py 875 Bytes
Newer Older
1 2 3 4 5
from celery import task
from logging import getLogger

from celery_utils.logged_task import LoggedTask
from celery_utils.persist_on_failure import PersistOnFailureTask
6 7
from django.contrib.auth.models import User
from opaque_keys.edx.keys import CourseKey
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

from .api import generate_user_certificates

logger = getLogger(__name__)


class _BaseCertificateTask(PersistOnFailureTask, LoggedTask):  # pylint: disable=abstract-method
    """
    Include persistence features, as well as logging of task invocation.
    """
    abstract = True


@task(base=_BaseCertificateTask)
def generate_certificate(**kwargs):
    """
    Generates a certificate for a single user.
    """
26 27
    student = User.objects.get(id=kwargs.pop('student'))
    course_key = CourseKey.from_string(kwargs.pop('course_key'))
28
    generate_user_certificates(student=student, course_key=course_key, **kwargs)