Commit 7799c4ad by Gregory Martin Committed by GitHub

Merge pull request #15592 from edx/yro-cert-pacing-signal

Course/Certificates Pacing Signal Registration
parents dfca1fa2 16945cc3
......@@ -960,6 +960,9 @@ INSTALLED_APPS = (
# Country embargo support
'openedx.core.djangoapps.embargo',
# Signals
'openedx.core.djangoapps.signals.apps.SignalConfig',
# Monitoring signals
'openedx.core.djangoapps.monitoring',
......
......@@ -3,10 +3,8 @@ Signal handler for enabling/disabling self-generated certificates based on the c
"""
import logging
from celery.task import task
from django.db.models.signals import post_save
from django.dispatch import receiver
from opaque_keys.edx.keys import CourseKey
from .config import waffle
from certificates.models import \
......@@ -16,7 +14,6 @@ from certificates.models import \
from certificates.tasks import generate_certificate
from courseware import courses
from lms.djangoapps.grades.new.course_grade_factory import CourseGradeFactory
from openedx.core.djangoapps.models.course_details import COURSE_PACING_CHANGE
from openedx.core.djangoapps.signals.signals import COURSE_GRADE_NOW_PASSED, LEARNER_NOW_VERIFIED
from student.models import CourseEnrollment
......@@ -54,24 +51,6 @@ def _listen_for_certificate_whitelist_append(sender, instance, **kwargs): # pyl
))
@receiver(COURSE_PACING_CHANGE, dispatch_uid="course_pacing_changed")
def _listen_for_course_pacing_changed(sender, course_key, course_self_paced, **kwargs): # pylint: disable=unused-argument
"""
Catches the signal that course pacing has changed and enable/disable
the self-generated certificates according to course-pacing.
"""
toggle_self_generated_certs.delay(unicode(course_key), course_self_paced)
@task()
def toggle_self_generated_certs(course_key, course_self_paced):
"""
Enable or disable self-generated certificates for a course according to pacing.
"""
course_key = CourseKey.from_string(course_key)
CertificateGenerationCourseSetting.set_enabled_for_course(course_key, course_self_paced)
@receiver(COURSE_GRADE_NOW_PASSED, dispatch_uid="new_passing_learner")
def _listen_for_passing_grade(sender, user, course_id, **kwargs): # pylint: disable=unused-argument
"""
......
......@@ -11,7 +11,7 @@ from certificates.models import \
CertificateWhitelist, \
GeneratedCertificate, \
CertificateStatuses
from certificates.signals import _listen_for_course_pacing_changed
from openedx.core.djangoapps.signals.handlers import _listen_for_course_pacing_changed
from lms.djangoapps.grades.new.course_grade_factory import CourseGradeFactory
from lms.djangoapps.grades.tests.utils import mock_passing_grade
from lms.djangoapps.verify_student.models import SoftwareSecurePhotoVerification
......
......@@ -2032,7 +2032,7 @@ INSTALLED_APPS = (
'branding',
'lms.djangoapps.grades.apps.GradesConfig',
# Signal
# Signals
'openedx.core.djangoapps.signals.apps.SignalConfig',
# Student support tools
......
......@@ -5,16 +5,14 @@ import re
import logging
from django.conf import settings
from django.dispatch import Signal
from xmodule.fields import Date
from xmodule.modulestore.exceptions import ItemNotFoundError
from openedx.core.djangoapps.self_paced.models import SelfPacedConfiguration
from openedx.core.djangoapps.signals.signals import COURSE_PACING_CHANGE
from openedx.core.lib.courses import course_image_url
from xmodule.modulestore.django import modulestore
COURSE_PACING_CHANGE = Signal(providing_args=["course_key", "course_self_paced"])
# This list represents the attribute keys for a course's 'about' info.
# Note: The 'video' attribute is intentionally excluded as it must be
......
......@@ -17,4 +17,4 @@ class SignalConfig(AppConfig):
"""
# Can't import models at module level in AppConfigs, and models get
# included from the signal handlers
from . import signals # pylint: disable=unused-variable
from . import signals, handlers # pylint: disable=unused-variable
"""
This module contains all general use or cross-use handlers.
"""
import logging
from celery.task import task
from django.dispatch import receiver
from certificates.models import CertificateGenerationCourseSetting
from opaque_keys.edx.keys import CourseKey
from signals import COURSE_PACING_CHANGE
log = logging.getLogger(__name__)
@receiver(COURSE_PACING_CHANGE, dispatch_uid="course_pacing_changed")
def _listen_for_course_pacing_changed(sender, course_key, course_self_paced, **kwargs): # pylint: disable=unused-argument
"""
Catches the signal that course pacing has changed and enable/disable
the self-generated certificates according to course-pacing.
"""
toggle_self_generated_certs.delay(unicode(course_key), course_self_paced)
log.info(u'Certificate Generation Setting Toggled for {course} via pacing change'.format(
course=course_key
))
@task
def toggle_self_generated_certs(course_key, course_self_paced):
"""
Enable or disable self-generated certificates for a course according to pacing.
"""
course_key = CourseKey.from_string(course_key)
CertificateGenerationCourseSetting.set_enabled_for_course(course_key, course_self_paced)
"""
This module contains all signals.
This module contains all general use signals.
"""
from django.dispatch import Signal
......@@ -22,3 +22,5 @@ COURSE_GRADE_NOW_PASSED = Signal(
# Signal that indicates that a user has become verified
LEARNER_NOW_VERIFIED = Signal(providing_args=['user'])
COURSE_PACING_CHANGE = Signal(providing_args=["course_key", "course_self_paced"])
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment