Esempio n. 1
0
    def test_is_success_response(self):
        """
        Make sure is_success_response logic works as expected.
        """
        response_fields = {'status': 200, 'error_message': None}
        self.assertTrue(is_success_response(response_fields))

        response_fields = {'status': 400, 'error_message': None}
        self.assertFalse(is_success_response(response_fields))

        response_fields = {'status': 500, 'error_message': None}
        self.assertFalse(is_success_response(response_fields))
    def send_xapi_statements(self, lrs_configuration, days):
        """
        Send xAPI analytics data of the enterprise learners to the given LRS.

        Arguments:
            lrs_configuration (XAPILRSConfiguration): Configuration object containing LRS configurations
                of the LRS where to send xAPI  learner analytics.
            days (int): Include course enrollment of this number of days.
        """
        course_enrollments = self.get_course_enrollments(
            lrs_configuration.enterprise_customer, days)
        course_catalog_client = get_course_catalog_api_service_client(
            site=lrs_configuration.enterprise_customer.site)
        for course_enrollment in course_enrollments:

            course_overview = course_enrollment.course
            courserun_id = six.text_type(course_overview.id)
            course_run_identifiers = course_catalog_client.get_course_run_identifiers(
                courserun_id)
            course_overview.course_key = course_run_identifiers['course_key']
            course_overview.course_uuid = course_run_identifiers['course_uuid']

            response_fields = Command.transmit_course_enrollment_statement(
                lrs_configuration, course_enrollment.user, course_overview)

            if is_success_response(response_fields):
                Command.transmit_courserun_enrollment_statement(
                    lrs_configuration, course_enrollment.user, course_overview)
Esempio n. 3
0
    def send_xapi_statements(self, lrs_configuration, days):
        """
        Send xAPI analytics data of the enterprise learners to the given LRS.

        Arguments:
            lrs_configuration (XAPILRSConfiguration): Configuration object containing LRS configurations
                of the LRS where to send xAPI  learner analytics.

            days (Numeric):  Deprecated.  Original implementation utilized a "days" parameter to limit
                the number of enrollments transmitted, but this proved to be more problematic than helpful.
        """
        enterprise_course_enrollments = self.get_enterprise_course_enrollments(lrs_configuration.enterprise_customer)
        enterprise_enrollment_ids = self.get_enterprise_enrollment_ids(enterprise_course_enrollments)
        xapi_transmission_queryset = self.get_xapi_transmission_queryset(enterprise_enrollment_ids)
        pertinent_enrollment_ids = self.get_pertinent_enrollment_ids(xapi_transmission_queryset)
        pertinent_enrollments = self.get_pertinent_enrollments(enterprise_course_enrollments, pertinent_enrollment_ids)
        enrollment_grades = self.get_course_completions(pertinent_enrollments)
        users = self.prefetch_users(enrollment_grades)
        course_overviews = self.prefetch_courses(enrollment_grades)
        course_catalog_client = get_course_catalog_api_service_client(site=lrs_configuration.enterprise_customer.site)

        for xapi_transmission in xapi_transmission_queryset:

            object_type = self.get_object_type(xapi_transmission)

            try:
                course_grade = enrollment_grades[xapi_transmission.enterprise_course_enrollment_id]
            except KeyError:
                continue

            user = users.get(course_grade.user_id)
            courserun_id = six.text_type(course_grade.course_id)
            course_overview = course_overviews.get(course_grade.course_id)
            course_run_identifiers = course_catalog_client.get_course_run_identifiers(courserun_id)
            course_overview.course_key = course_run_identifiers['course_key']
            course_overview.course_uuid = course_run_identifiers['course_uuid']

            default_error_message = 'Days argument has been deprecated.  Value: {days}'.format(days=days)
            response_fields = {'status': 500, 'error_message': default_error_message}
            response_fields = send_course_completion_statement(
                lrs_configuration,
                user,
                course_overview,
                course_grade,
                object_type,
                response_fields
            )

            if is_success_response(response_fields):
                self.save_xapi_learner_data_transmission_audit(
                    xapi_transmission,
                    course_grade.percent_grade,
                    1,
                    course_grade.passed_timestamp,
                    response_fields.get('status'),
                    response_fields.get('error_message')
                )
    def transmit_courserun_enrollment_statement(lrs_configuration, user,
                                                course_overview):
        """
        Transmits an xAPI enrollment statement for a courserun object
        """
        object_type = ContentType.COURSE_RUN
        response_fields = Command.transmit_enrollment_statement(
            lrs_configuration, user, course_overview, object_type)

        if is_success_response(response_fields):
            courserun_id = six.text_type(course_overview.id)
            enterprise_course_enrollment_id = EnterpriseCourseEnrollment.get_enterprise_course_enrollment_id(
                user, courserun_id, lrs_configuration.enterprise_customer)

            Command.save_xapi_learner_data_transmission_audit(
                user, courserun_id, enterprise_course_enrollment_id,
                response_fields.get('status'),
                response_fields.get('error_message'))
        return response_fields