cleanup
This commit is contained in:
@@ -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,26 +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)
|
||||
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)
|
||||
|
||||
|
||||
@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
|
||||
|
||||
@@ -2030,7 +2030,7 @@ INSTALLED_APPS = (
|
||||
'branding',
|
||||
'lms.djangoapps.grades.apps.GradesConfig',
|
||||
|
||||
# Signal
|
||||
# Signals
|
||||
'openedx.core.djangoapps.signals.apps.SignalConfig',
|
||||
|
||||
# Student support tools
|
||||
|
||||
34
openedx/core/djangoapps/signals/handlers.py
Normal file
34
openedx/core/djangoapps/signals/handlers.py
Normal file
@@ -0,0 +1,34 @@
|
||||
"""
|
||||
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)
|
||||
@@ -1,5 +1,5 @@
|
||||
"""
|
||||
This module contains all signals.
|
||||
This module contains all general use signals.
|
||||
"""
|
||||
|
||||
from django.dispatch import Signal
|
||||
|
||||
43
openedx/core/djangoapps/signals/tests/test_handlers.py
Normal file
43
openedx/core/djangoapps/signals/tests/test_handlers.py
Normal file
@@ -0,0 +1,43 @@
|
||||
"""
|
||||
Unit tests for enabling self-generated certificates for self-paced courses
|
||||
and disabling for instructor-paced courses.
|
||||
"""
|
||||
|
||||
from certificates import api as certs_api
|
||||
from certificates.models import CertificateGenerationConfiguration
|
||||
from openedx.core.djangoapps.self_paced.models import SelfPacedConfiguration
|
||||
from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
|
||||
from xmodule.modulestore.tests.factories import CourseFactory
|
||||
from openedx.core.djangoapps.signals.handlers import _listen_for_course_pacing_changed
|
||||
|
||||
|
||||
class SelfGeneratedCertsSignalTest(ModuleStoreTestCase):
|
||||
"""
|
||||
Tests for enabling/disabling self-generated certificates according to course-pacing.
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
super(SelfGeneratedCertsSignalTest, self).setUp()
|
||||
SelfPacedConfiguration(enabled=True).save()
|
||||
self.course = CourseFactory.create(self_paced=True)
|
||||
# Enable the feature
|
||||
CertificateGenerationConfiguration.objects.create(enabled=True)
|
||||
|
||||
def test_cert_generation_flag_on_pacing_toggle(self):
|
||||
"""
|
||||
Verify that signal enables or disables self-generated certificates
|
||||
according to course-pacing.
|
||||
"""
|
||||
#self-generation of cert disables by default
|
||||
self.assertFalse(certs_api.cert_generation_enabled(self.course.id))
|
||||
|
||||
_listen_for_course_pacing_changed('store', self.course.id, self.course.self_paced)
|
||||
#verify that self-generation of cert is enabled for self-paced course
|
||||
self.assertTrue(certs_api.cert_generation_enabled(self.course.id))
|
||||
|
||||
self.course.self_paced = False
|
||||
self.store.update_item(self.course, self.user.id)
|
||||
|
||||
_listen_for_course_pacing_changed('store', self.course.id, self.course.self_paced)
|
||||
# verify that self-generation of cert is disabled for instructor-paced course
|
||||
self.assertFalse(certs_api.cert_generation_enabled(self.course.id))
|
||||
Reference in New Issue
Block a user