From 867bc9e3168e4e7772e6cb32b9c109de6210f94a Mon Sep 17 00:00:00 2001 From: rabiaiftikhar Date: Thu, 1 Jun 2017 15:04:42 +0500 Subject: [PATCH] get the course from CourseOverview table instead of Modulestore in certificates/signals.py. --- lms/djangoapps/certificates/signals.py | 8 ++++---- .../core/djangoapps/content/course_overviews/models.py | 8 ++++++++ .../core/djangoapps/content/course_overviews/signals.py | 6 ++++-- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/lms/djangoapps/certificates/signals.py b/lms/djangoapps/certificates/signals.py index 6097dfad8b..352df0a8ac 100644 --- a/lms/djangoapps/certificates/signals.py +++ b/lms/djangoapps/certificates/signals.py @@ -5,13 +5,13 @@ from celery.task import task from django.dispatch.dispatcher import receiver from certificates.models import CertificateGenerationCourseSetting +from openedx.core.djangoapps.content.course_overviews.models import CourseOverview, COURSE_OVERVIEW_UPDATED from opaque_keys.edx.keys import CourseKey -from xmodule.modulestore.django import modulestore, SignalHandler -@receiver(SignalHandler.course_published) +@receiver(COURSE_OVERVIEW_UPDATED) def _listen_for_course_publish(sender, course_key, **kwargs): # pylint: disable=unused-argument - """ Catches the signal that a course has been published in Studio and + """ Catches the signal that a course overview table has been updated in database and enable/disable the self-generated certificates according to course-pacing. """ set_self_generated_certs.delay(unicode(course_key)) @@ -23,5 +23,5 @@ def set_self_generated_certs(course_key): Enable or disable self-generated certificates for a course according to pacing. """ course_key = CourseKey.from_string(course_key) - course = modulestore().get_course(course_key) + course = CourseOverview.get_from_id(course_key) CertificateGenerationCourseSetting.set_enabled_for_course(course_key, course.self_paced) diff --git a/openedx/core/djangoapps/content/course_overviews/models.py b/openedx/core/djangoapps/content/course_overviews/models.py index f61d994f3b..e2f96fc065 100644 --- a/openedx/core/djangoapps/content/course_overviews/models.py +++ b/openedx/core/djangoapps/content/course_overviews/models.py @@ -10,6 +10,7 @@ from django.db import models, transaction from django.db.models.fields import BooleanField, DateTimeField, DecimalField, TextField, FloatField, IntegerField from django.db.utils import IntegrityError from django.template import defaultfilters +from django.dispatch import Signal from ccx_keys.locator import CCXLocator from model_utils.models import TimeStampedModel @@ -26,6 +27,7 @@ from xmodule.modulestore.django import modulestore from openedx.core.djangoapps.xmodule_django.models import CourseKeyField, UsageKeyField from openedx.core.lib.xblock_fields.inherited_fields import DEFAULT_START_DATE +COURSE_OVERVIEW_UPDATED = Signal(providing_args=["course_key"]) log = logging.getLogger(__name__) @@ -646,6 +648,12 @@ class CourseOverview(TimeStampedModel): """Represent ourselves with the course key.""" return unicode(self.id) + def send_signal(self): + """ + Sends out the signal that course_overview table has been updated. + """ + COURSE_OVERVIEW_UPDATED.send(sender=None, course_key=self.id) + class CourseOverviewTab(models.Model): """ diff --git a/openedx/core/djangoapps/content/course_overviews/signals.py b/openedx/core/djangoapps/content/course_overviews/signals.py index f32cf24848..aab9bbafae 100644 --- a/openedx/core/djangoapps/content/course_overviews/signals.py +++ b/openedx/core/djangoapps/content/course_overviews/signals.py @@ -11,9 +11,11 @@ from xmodule.modulestore.django import SignalHandler def _listen_for_course_publish(sender, course_key, **kwargs): # pylint: disable=unused-argument """ Catches the signal that a course has been published in Studio and - updates the corresponding CourseOverview cache entry. + updates the corresponding CourseOverview cache entry. Also sends out + the signal that course_overview table has been updated. """ - CourseOverview.load_from_module_store(course_key) + course_overview = CourseOverview.load_from_module_store(course_key) + course_overview.send_signal() @receiver(SignalHandler.course_deleted)