Add a GET endpoint to list ProgramCourseEnrollment data.
This commit is contained in:
committed by
Alex Dusenbery
parent
44359938c4
commit
403fb52e93
@@ -3,11 +3,15 @@ Utilities related to API views
|
||||
"""
|
||||
from __future__ import absolute_import
|
||||
from collections import Sequence
|
||||
from functools import wraps
|
||||
|
||||
from django.core.exceptions import NON_FIELD_ERRORS, ObjectDoesNotExist, ValidationError
|
||||
from django.http import Http404
|
||||
from django.utils.translation import ugettext as _
|
||||
from edx_rest_framework_extensions.auth.jwt.authentication import JwtAuthentication
|
||||
from edx_rest_framework_extensions.auth.session.authentication import SessionAuthenticationAllowInactiveUser
|
||||
from opaque_keys import InvalidKeyError
|
||||
from opaque_keys.edx.keys import CourseKey
|
||||
from rest_framework import status
|
||||
from rest_framework.exceptions import APIException
|
||||
from rest_framework.generics import GenericAPIView
|
||||
@@ -18,6 +22,7 @@ from rest_framework.response import Response
|
||||
from rest_framework.views import APIView
|
||||
from six import text_type, iteritems
|
||||
|
||||
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
|
||||
from openedx.core.lib.api.authentication import OAuth2AuthenticationAllowInactiveUser
|
||||
from openedx.core.lib.api.permissions import IsUserInUrl
|
||||
|
||||
@@ -338,3 +343,41 @@ class PaginatedAPIView(APIView):
|
||||
"""
|
||||
assert self.paginator is not None
|
||||
return self.paginator.get_paginated_response(data)
|
||||
|
||||
|
||||
def get_course_key(request, course_id=None):
|
||||
if not course_id:
|
||||
return CourseKey.from_string(request.GET.get('course_id'))
|
||||
return CourseKey.from_string(course_id)
|
||||
|
||||
|
||||
def verify_course_exists(view_func):
|
||||
"""
|
||||
A decorator to wrap a view function that takes `course_key` as a parameter.
|
||||
|
||||
Raises:
|
||||
An API error if the `course_key` is invalid, or if no `CourseOverview` exists for the given key.
|
||||
"""
|
||||
@wraps(view_func)
|
||||
def wrapped_function(self, request, **kwargs):
|
||||
"""
|
||||
Wraps the given view_function.
|
||||
"""
|
||||
try:
|
||||
course_key = get_course_key(request, kwargs.get('course_id'))
|
||||
except InvalidKeyError:
|
||||
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):
|
||||
raise self.api_error(
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
developer_message=u"Requested grade for unknown course {course}".format(course=text_type(course_key)),
|
||||
error_code='course_does_not_exist'
|
||||
)
|
||||
|
||||
return view_func(self, request, **kwargs)
|
||||
return wrapped_function
|
||||
|
||||
Reference in New Issue
Block a user