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)
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