def section_problem_grade_distrib(request, course_id, section): """ Creates a json with the grade distribution for the problems in the specified section. `request` django request `course_id` the course ID for the course interested in `section` The zero-based index of the section for the course Returns the format in dashboard_data.get_d3_section_grade_distrib If this is requested multiple times quickly for the same course, it is better to call all_problem_grade_distribution and pick out the sections of interest. """ data = {} # Only instructor for this particular course can request this information course_key = SlashSeparatedCourseKey.from_deprecated_string(course_id) if has_instructor_access_for_class(request.user, course_key): try: data = dashboard_data.get_d3_section_grade_distrib(course_key, section) except Exception as ex: # pylint: disable=broad-except log.error('Generating metrics failed with exception: %s', ex) data = {'error': "error"} else: data = {'error': "Access Denied: User does not have access to this course's data"} return HttpResponse(json.dumps(data), content_type="application/json")
def section_problem_grade_distrib(request, course_id, section): """ Creates a json with the grade distribution for the problems in the specified section. `request` django request `course_id` the course ID for the course interested in `section` The zero-based index of the section for the course Returns the format in dashboard_data.get_d3_section_grade_distrib If this is requested multiple times quickly for the same course, it is better to call all_problem_grade_distribution and pick out the sections of interest. """ json = {} # Only instructor for this particular course can request this information if has_instructor_access_for_class(request.user, course_id): try: json = dashboard_data.get_d3_section_grade_distrib( course_id, section) except Exception as ex: # pylint: disable=broad-except log.error('Generating metrics failed with exception: %s', ex) json = {'error': "error"} else: json = { 'error': "Access Denied: User does not have access to this course's data" } return HttpResponse(simplejson.dumps(json), mimetype="application/json")
def section_problem_grade_distrib(request, course_id, section, enrollment): """ Creates a json with the grade distribution for the problems in the specified section. `request` django request `course_id` the course ID for the course interested in `section` The zero-based index of the section for the course `enrollment` the number of students enrolled in the course Returns the format in dashboard_data.get_d3_section_grade_distrib If this is requested multiple times quickly for the same course, it is better to call all_problem_grade_distribution and pick out the sections of interest. """ data = {} # Only instructor for this particular course can request this information course_key = SlashSeparatedCourseKey.from_deprecated_string(course_id) if has_instructor_access_for_class(request.user, course_key): try: data = dashboard_data.get_d3_section_grade_distrib(course_key, section, int(enrollment)) except Exception as ex: # pylint: disable=broad-except log.error('Generating metrics failed with exception: %s', ex) data = {'error': "error"} else: data = {'error': "Access Denied: User does not have access to this course's data"} return HttpResponse(json.dumps(data), content_type="application/json")
def test_get_d3_section_grade_distrib(self): d3_data = get_d3_section_grade_distrib(self.course.id, 0) for stack_data in d3_data: sum_values = 0 for problem in stack_data['stackData']: sum_values += problem['value'] self.assertEquals(USER_COUNT, sum_values)
def test_get_d3_section_grade_distrib(self, mock_client): mock_client.return_value.modules.return_value.grade_distribution.return_value = [ { 'grade': 1, 'max_grade': 1, 'count': USER_COUNT, }, ] d3_data = get_d3_section_grade_distrib(self.course.id, 0, USER_COUNT) for stack_data in d3_data: sum_values = 0 for problem in stack_data['stackData']: sum_values += problem['value'] self.assertEquals(USER_COUNT, sum_values)