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)
Beispiel #3
0
 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)
Beispiel #4
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)))
Beispiel #5
0
    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)
Beispiel #6
0
    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)