def get(self, request, *args, **kwargs): """ Get enrollments on edxapp """ user_query = self.get_user_query(request) user = get_edxapp_user(**user_query) course_id = self.query_params.get('course_id', None) if not course_id: raise ValidationError(detail='You have to provide a course_id') enrollment_query = { 'username': user.username, 'course_id': course_id, } enrollment, errors = get_enrollment(**enrollment_query) if errors: raise NotFound(detail=errors) response = EdxappCourseEnrollmentSerializer(enrollment).data return Response(response)
def __validate_enrollment_integrity(self, object_name): """ Function that validates existence of the enrollment. Arguments: - object_name: name of the object to validate. It can be: target_object or owner_object """ object_ = self.instance.get_attribute(object_name) data = { "username": object_.username, "course_id": str(object_.course_id), } try: enrollment, _ = get_enrollment(**data) if not enrollment: raise ValidationError( "EOX_TAGGING | Enrollment for user '{}' and courseID '{}' does not exist" .format(data["username"], data["course_id"])) except Exception: raise ValidationError( "EOX_TAGGING | Error getting enrollment for user '{}' and courseID '{}'" .format(data["username"], data["course_id"]))
def get(self, request, *args, **kwargs): """ Retrieves enrollment information given a user and a course_id **Example Requests** GET /eox-core/api/v1/enrollment/?username=johndoe& course_id=course-v1:edX+DemoX+Demo_Course Request data: { "username": "******", "course_id": "course-v1:edX+DemoX+Demo_Course", } **Returns** - 200: Success, enrollment found. - 400: Bad request, missing course_id or either email or username - 404: User or course not found """ user_query = self.get_user_query(request) user = get_edxapp_user(**user_query) course_id = self.query_params.get("course_id", None) if not course_id: raise ValidationError(detail="You have to provide a course_id") enrollment_query = { "username": user.username, "course_id": course_id, } enrollment, errors = get_enrollment(**enrollment_query) if errors: raise NotFound(detail=errors) response = EdxappCourseEnrollmentSerializer(enrollment).data return Response(response)
def get(self, request): """ Retrieves Grades information for given a user and course_id **Example Requests** GET /eox-core/api/v1/grade/?username=johndoe&course_id=course-v1:edX+DemoX+Demo_Course Request data: { "username": "******", "course_id": "course-v1:edX+DemoX+Demo_Course", } **Response details** - `earned_grade`: Final user score for the course. - `section_breakdown` (**optional**): Details of each grade subsection. - `attempted`: Whether the learner attempted the assignment. - `assignment_type`: General category of the assignment. - `percent`: Grade obtained by the user on this subsection. - `score_earned`: The score a user earned on this subsection. - `score_possible`: Highest possible score a user can earn on this subsection. - `subsection_name`: Name of the subsection. - `grading_policy` (**optional**): Course grading policy. - `grade_cutoff`: Score needed to reach each grade. - `grader`: Details of each assignment type used by the Grader. - `assignment_type`: General category of the assignment. - `count`: Number of assignments of this type. - `dropped`: The number of assignments of this type that the grader will drop. The grader will drop the lowest-scored assignments first. - `weight`: Weight of this type of assignment towards the final grade. More information about grading can be found in the [edX documentation](https://edx.readthedocs.io/projects/open-edx-building-and-running-a-course/en/latest/student_progress/course_grades.html). **Returns** - 200: Success. - 400: Bad request, missing course_id or either email or username. - 404: User, course or enrollment not found. """ user_query = self.get_user_query(request) user = get_edxapp_user(**user_query) course_id = self.query_params.get("course_id", None) detailed = self.query_params.get("detailed", False) grading_policy = self.query_params.get("grading_policy", False) if not course_id: raise ValidationError(detail="You have to provide a course_id") _, errors = get_enrollment(username=user.username, course_id=course_id) if errors: raise NotFound(errors) grade_factory = get_course_grade_factory() course_key = get_valid_course_key(course_id) course = get_courseware_courses().get_course_by_id(course_key) course_grade = grade_factory().read(user, course) response = {"earned_grade": course_grade.percent} if detailed in ("True", "true", "on", "1"): breakdown = self._section_breakdown(course_grade.subsection_grades) response["section_breakdown"] = breakdown if grading_policy in ("True", "true", "on", "1"): response["grading_policy"] = course.grading_policy return Response(EdxappGradeSerializer(response).data)