Course Validation and Course Quality APIs

This commit is contained in:
Nimisha Asthagiri
2018-06-05 21:25:21 -04:00
parent 947d82737e
commit 8db2dd47dd
15 changed files with 830 additions and 90 deletions

View File

@@ -168,14 +168,14 @@ class CourseGradesView(GradeViewMixin, GenericAPIView):
try:
course_key = CourseKey.from_string(course_id)
except InvalidKeyError:
return self.make_error_response(
raise self.api_error(
status_code=status.HTTP_404_NOT_FOUND,
developer_message='The provided course key cannot be parsed.',
error_code='invalid_course_key'
)
if not CourseOverview.get_from_id_if_exists(course_key):
return self.make_error_response(
raise self.api_error(
status_code=status.HTTP_404_NOT_FOUND,
developer_message="Requested grade for unknown course {course}".format(course=course_id),
error_code='course_does_not_exist'
@@ -186,13 +186,13 @@ class CourseGradesView(GradeViewMixin, GenericAPIView):
try:
return self._get_single_user_grade(request, course_key)
except USER_MODEL.DoesNotExist:
return self.make_error_response(
raise self.api_error(
status_code=status.HTTP_404_NOT_FOUND,
developer_message='The user matching the requested username does not exist.',
error_code='user_does_not_exist'
)
except CourseEnrollment.DoesNotExist:
return self.make_error_response(
raise self.api_error(
status_code=status.HTTP_404_NOT_FOUND,
developer_message='The user matching the requested username is not enrolled in this course',
error_code='user_not_enrolled'

View File

@@ -35,7 +35,7 @@ class GradeViewMixin(DeveloperErrorViewMixin):
try:
course_key = CourseKey.from_string(course_key_string)
except InvalidKeyError:
return self.make_error_response(
raise self.api_error(
status_code=status.HTTP_404_NOT_FOUND,
developer_message='The provided course key cannot be parsed.',
error_code='invalid_course_key'
@@ -52,7 +52,8 @@ class GradeViewMixin(DeveloperErrorViewMixin):
log.info('Course with ID "%s" not found', course_key_string)
except CourseAccessRedirect:
log.info('User %s does not have access to course with ID "%s"', user.username, course_key_string)
return self.make_error_response(
raise self.api_error(
status_code=status.HTTP_404_NOT_FOUND,
developer_message='The user, the course or both do not exist.',
error_code='user_or_course_does_not_exist',
@@ -84,7 +85,7 @@ class GradeViewMixin(DeveloperErrorViewMixin):
request.user.username,
username
)
return self.make_error_response(
raise self.api_error(
status_code=status.HTTP_403_FORBIDDEN,
developer_message='The user requested does not match the logged in user.',
error_code='user_mismatch'
@@ -94,7 +95,7 @@ class GradeViewMixin(DeveloperErrorViewMixin):
return USER_MODEL.objects.get(username=username)
except USER_MODEL.DoesNotExist:
return self.make_error_response(
raise self.api_error(
status_code=status.HTTP_404_NOT_FOUND,
developer_message='The user matching the requested username does not exist.',
error_code='user_does_not_exist'
@@ -173,17 +174,9 @@ class UserGradeView(GradeViewMixin, GenericAPIView):
"""
course = self._get_course(course_id, request.user, 'load')
if isinstance(course, Response):
# Returns a 404 if course_id is invalid, or request.user is not enrolled in the course
return course
grade_user = self._get_effective_user(request, course)
if isinstance(grade_user, Response):
# Returns a 403 if the request.user can't access grades for the requested user,
# or a 404 if the requested user does not exist.
return grade_user
course_grade = CourseGradeFactory().read(grade_user, course)
return Response([{
'username': grade_user.username,
'course_key': course_id,
@@ -221,6 +214,4 @@ class CourseGradingPolicy(GradeViewMixin, ListAPIView):
def get(self, request, course_id, **kwargs):
course = self._get_course(course_id, request.user, 'staff')
if isinstance(course, Response):
return course
return Response(GradingPolicySerializer(course.raw_grader, many=True).data)