def send_notifications(self, certs, grades, delay=0, page_size=0): """ Run actual handler commands for the provided certs and grades. """ # First, do certs for i, cert in paged_query(certs, delay, page_size): log.info( "Handling credential changes %d for certificate %s", i, certstr(cert), ) signal_args = { 'sender': None, 'user': cert.user, 'course_key': cert.course_id, 'mode': cert.mode, 'status': cert.status, } handle_course_cert_changed(**signal_args) handle_cert_change(**signal_args) # Then do grades for i, grade in paged_query(grades, delay, page_size): log.info( "Handling grade changes %d for grade %s", i, gradestr(grade), ) user = User.objects.get(id=grade.user_id) send_grade_if_interesting(user, grade.course_id, None, None, grade.letter_grade, grade.percent_grade)
def send_notifications(self, certs, grades, delay=0, page_size=0): """ Run actual handler commands for the provided certs and grades. """ # First, do certs for i, cert in paged_query(certs, delay, page_size): log.info( "Handling credential changes %d for certificate %s", i, certstr(cert), ) signal_args = { 'sender': None, 'user': cert.user, 'course_key': cert.course_id, 'mode': cert.mode, 'status': cert.status, } handle_course_cert_changed(**signal_args) handle_cert_change(**signal_args) # Then do grades for i, grade in paged_query(grades, delay, page_size): log.info( "Handling grade changes %d for grade %s", i, gradestr(grade), ) user = User.objects.get(id=grade.user_id) send_grade_if_interesting(user, grade.course_id, None, None, grade.letter_grade, grade.percent_grade)
def test_credentials_disabled(self, mock_is_learner_issuance_enabled, mock_task): """ Ensures that the receiver function does nothing when the credentials API configuration is not enabled. """ handle_course_cert_changed(**self.signal_kwargs) self.assertEqual(mock_is_learner_issuance_enabled.call_count, 1) self.assertEqual(mock_task.call_count, 0)
def test_credentials_enabled(self, mock_is_learner_issuance_enabled, mock_task): """ Ensures that the receiver function invokes the expected celery task when the credentials API configuration is enabled. """ mock_is_learner_issuance_enabled.return_value = True handle_course_cert_changed(**self.signal_kwargs) self.assertEqual(mock_is_learner_issuance_enabled.call_count, 1) self.assertEqual(mock_task.call_count, 1) self.assertEqual(mock_task.call_args[0], (TEST_USERNAME, str(TEST_COURSE_KEY)))
def test_records_enabled(self, mock_is_learner_issuance_enabled, mock_task): mock_is_learner_issuance_enabled.return_value = True site_config = SiteConfigurationFactory.create( values={'course_org_filter': ['edX']}, ) # Correctly sent handle_course_cert_changed(**self.signal_kwargs) self.assertTrue(mock_task.called) mock_task.reset_mock() # Correctly not sent site_config.values['ENABLE_LEARNER_RECORDS'] = False site_config.save() handle_course_cert_changed(**self.signal_kwargs) self.assertFalse(mock_task.called)
def send_notifications(self, certs, grades, site_config=None, delay=0, page_size=0, verbose=False, notify_programs=False): """ Run actual handler commands for the provided certs and grades. """ course_cert_info = {} # First, do certs for i, cert in paged_query(certs, delay, page_size): if site_config and not site_config.has_org(cert.course_id.org): log.info(u"Skipping credential changes %d for certificate %s", i, certstr(cert)) continue log.info( u"Handling credential changes %d for certificate %s", i, certstr(cert), ) signal_args = { 'sender': None, 'user': cert.user, 'course_key': cert.course_id, 'mode': cert.mode, 'status': cert.status, 'verbose': verbose, } data = {'mode': cert.mode, 'status': cert.status} course_cert_info[(cert.user.id, str(cert.course_id))] = data handle_course_cert_changed(**signal_args) if notify_programs and CertificateStatuses.is_passing_status( cert.status): handle_course_cert_awarded(**signal_args) # Then do grades for i, grade in paged_query(grades, delay, page_size): if site_config and not site_config.has_org(grade.course_id.org): log.info(u"Skipping grade changes %d for grade %s", i, gradestr(grade)) continue log.info( u"Handling grade changes %d for grade %s", i, gradestr(grade), ) user = User.objects.get(id=grade.user_id) # Grab mode/status from cert call key = (user.id, str(grade.course_id)) cert_info = course_cert_info.get(key, {}) mode = cert_info.get('mode', None) status = cert_info.get('status', None) send_grade_if_interesting(user, grade.course_id, mode, status, grade.letter_grade, grade.percent_grade, verbose=verbose)