Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 5 additions & 7 deletions lms/djangoapps/certificates/signals.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ def toggle_self_generated_certs(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
def _listen_for_passing_grade(sender, user, course_key, **kwargs): # pylint: disable=unused-argument
"""
Listen for a learner passing a course, send cert generation task,
downstream signal from COURSE_GRADE_CHANGED
Expand All @@ -93,12 +93,10 @@ def _listen_for_passing_grade(sender, user, course_id, **kwargs): # pylint: dis
elif waffle.waffle().is_enabled(waffle.INSTRUCTOR_PACED_ONLY):
if courses.get_course_by_id(course_key, depth=0).self_paced:
return
if GeneratedCertificate.certificate_for_student(self.user, self.course_id) is None:
generate_certificate.apply_async(
student=user,
course_key=course_id,
)
if GeneratedCertificate.certificate_for_student(user, course_key) is None:
kwargs = dict(student=user.id, course_key=unicode(course_key),)
generate_certificate.apply_async(kwargs=kwargs)
log.info(u'Certificate generation task initiated for {user} : {course} via passing grade'.format(
user=user.id,
course=course_id
course=course_key
))
7 changes: 5 additions & 2 deletions lms/djangoapps/certificates/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
from celery_utils.logged_task import LoggedTask
from celery_utils.persist_on_failure import PersistOnFailureTask

from django.contrib.auth.models import User
from opaque_keys.edx.keys import CourseKey

from .api import generate_user_certificates

logger = getLogger(__name__)
Expand All @@ -21,6 +24,6 @@ def generate_certificate(**kwargs):
"""
Generates a certificate for a single user.
"""
student = kwargs.pop('student')
course_key = kwargs.pop('course_key')
student = User.objects.get(id=kwargs.pop('student'))
course_key = CourseKey.from_string(kwargs.pop('course_key'))
generate_user_certificates(student=student, course_key=course_key, **kwargs)
8 changes: 5 additions & 3 deletions lms/djangoapps/grades/new/course_grade_factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,10 @@ def create(self, user, course=None, collected_block_structure=None, course_struc
course_data = CourseData(user, course, collected_block_structure, course_structure, course_key)
try:
course_grade, read_policy_hash = self._read(user, course_data)
if read_policy_hash == course_data.grading_policy_hash:
return course_grade
# BCW: this logic has to be removed in orde to allow cert generation on passing grade
# but probably adds to performance overhead
# if read_policy_hash == course_data.grading_policy_hash:
# return course_grade
read_only = False # update the persisted grade since the policy changed; TODO(TNL-6786) remove soon
except PersistentCourseGrade.DoesNotExist:
if assume_zero_if_absent(course_data.course_key):
Expand Down Expand Up @@ -218,7 +220,7 @@ def _update(user, course_data, read_only, force_update_subsections=False):
COURSE_GRADE_NOW_PASSED.send_robust(
sender=CourseGradeFactory,
user=user,
course_key=course_data.course_key,
course_key=course_data.course_key
)

log.info(
Expand Down