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 = ( ...@@ -960,6 +960,9 @@ INSTALLED_APPS = (
# Country embargo support # Country embargo support
'openedx.core.djangoapps.embargo', 'openedx.core.djangoapps.embargo',
# Signals
'openedx.core.djangoapps.signals.apps.SignalConfig',
# Monitoring signals # Monitoring signals
'openedx.core.djangoapps.monitoring', 'openedx.core.djangoapps.monitoring',
......
...@@ -3,10 +3,8 @@ Signal handler for enabling/disabling self-generated certificates based on the c ...@@ -3,10 +3,8 @@ Signal handler for enabling/disabling self-generated certificates based on the c
""" """
import logging import logging
from celery.task import task
from django.db.models.signals import post_save from django.db.models.signals import post_save
from django.dispatch import receiver from django.dispatch import receiver
from opaque_keys.edx.keys import CourseKey
from .config import waffle from .config import waffle
from certificates.models import \ from certificates.models import \
...@@ -16,7 +14,6 @@ from certificates.models import \ ...@@ -16,7 +14,6 @@ from certificates.models import \
from certificates.tasks import generate_certificate from certificates.tasks import generate_certificate
from courseware import courses from courseware import courses
from lms.djangoapps.grades.new.course_grade_factory import CourseGradeFactory 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 openedx.core.djangoapps.signals.signals import COURSE_GRADE_NOW_PASSED, LEARNER_NOW_VERIFIED
from student.models import CourseEnrollment from student.models import CourseEnrollment
...@@ -54,24 +51,6 @@ def _listen_for_certificate_whitelist_append(sender, instance, **kwargs): # pyl ...@@ -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") @receiver(COURSE_GRADE_NOW_PASSED, dispatch_uid="new_passing_learner")
def _listen_for_passing_grade(sender, user, course_id, **kwargs): # pylint: disable=unused-argument def _listen_for_passing_grade(sender, user, course_id, **kwargs): # pylint: disable=unused-argument
""" """
......
...@@ -11,7 +11,7 @@ from certificates.models import \ ...@@ -11,7 +11,7 @@ from certificates.models import \
CertificateWhitelist, \ CertificateWhitelist, \
GeneratedCertificate, \ GeneratedCertificate, \
CertificateStatuses 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.new.course_grade_factory import CourseGradeFactory
from lms.djangoapps.grades.tests.utils import mock_passing_grade from lms.djangoapps.grades.tests.utils import mock_passing_grade
from lms.djangoapps.verify_student.models import SoftwareSecurePhotoVerification from lms.djangoapps.verify_student.models import SoftwareSecurePhotoVerification
......
...@@ -2032,7 +2032,7 @@ INSTALLED_APPS = ( ...@@ -2032,7 +2032,7 @@ INSTALLED_APPS = (
'branding', 'branding',
'lms.djangoapps.grades.apps.GradesConfig', 'lms.djangoapps.grades.apps.GradesConfig',
# Signal # Signals
'openedx.core.djangoapps.signals.apps.SignalConfig', 'openedx.core.djangoapps.signals.apps.SignalConfig',
# Student support tools # Student support tools
......
...@@ -5,16 +5,14 @@ import re ...@@ -5,16 +5,14 @@ import re
import logging import logging
from django.conf import settings from django.conf import settings
from django.dispatch import Signal
from xmodule.fields import Date from xmodule.fields import Date
from xmodule.modulestore.exceptions import ItemNotFoundError from xmodule.modulestore.exceptions import ItemNotFoundError
from openedx.core.djangoapps.self_paced.models import SelfPacedConfiguration 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 openedx.core.lib.courses import course_image_url
from xmodule.modulestore.django import modulestore 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. # This list represents the attribute keys for a course's 'about' info.
# Note: The 'video' attribute is intentionally excluded as it must be # Note: The 'video' attribute is intentionally excluded as it must be
......
...@@ -17,4 +17,4 @@ class SignalConfig(AppConfig): ...@@ -17,4 +17,4 @@ class SignalConfig(AppConfig):
""" """
# Can't import models at module level in AppConfigs, and models get # Can't import models at module level in AppConfigs, and models get
# included from the signal handlers # 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 from django.dispatch import Signal
...@@ -22,3 +22,5 @@ COURSE_GRADE_NOW_PASSED = Signal( ...@@ -22,3 +22,5 @@ COURSE_GRADE_NOW_PASSED = Signal(
# Signal that indicates that a user has become verified # Signal that indicates that a user has become verified
LEARNER_NOW_VERIFIED = Signal(providing_args=['user']) 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