Files
edx-platform/lms/djangoapps/gating/signals.py
2021-02-22 12:58:41 +05:00

58 lines
2.0 KiB
Python

"""
Signal handlers for the gating djangoapp
"""
from completion.models import BlockCompletion
from django.db import models
from django.dispatch import receiver
from lms.djangoapps.gating import api as gating_api
from lms.djangoapps.gating.tasks import task_evaluate_subsection_completion_milestones
from lms.djangoapps.grades.api import signals as grades_signals
from openedx.core.djangoapps.signals.signals import COURSE_GRADE_CHANGED
@receiver(grades_signals.SUBSECTION_SCORE_CHANGED)
def evaluate_subsection_gated_milestones(**kwargs):
"""
Receives the SUBSECTION_SCORE_CHANGED signal and triggers the
evaluation of any milestone relationships which are attached
to the subsection.
Arguments:
kwargs (dict): Contains user, course, course_structure, subsection_grade
Returns:
None
"""
subsection_grade = kwargs['subsection_grade']
gating_api.evaluate_prerequisite(kwargs['course'], subsection_grade, kwargs.get('user'))
@receiver(models.signals.post_save, sender=BlockCompletion)
def evaluate_subsection_completion_milestones(**kwargs):
"""
Receives the BlockCompletion signal and triggers the
evaluation of any milestone which can be completed.
"""
instance = kwargs['instance']
course_id = str(instance.context_key)
if not instance.context_key.is_course:
return # Content in a library or some other thing that doesn't support milestones
block_id = str(instance.block_key)
user_id = instance.user_id
task_evaluate_subsection_completion_milestones.delay(course_id, block_id, user_id)
@receiver(COURSE_GRADE_CHANGED)
def evaluate_course_gated_milestones(**kwargs):
"""
Receives the COURSE_GRADE_CHANGED signal and triggers the
evaluation of any milestone relationships which are attached
to the course grade.
Arguments:
kwargs (dict): Contains user, course_grade
Returns:
None
"""
gating_api.evaluate_entrance_exam(kwargs['course_grade'], kwargs.get('user'))