Commit 33e5803e by Zia Fazal Committed by Jonathan Piacenti

implemented paging on courses list

parent dca22308
""" Django REST Framework Serializers """
from api_manager.models import CourseModuleCompletion
from api_manager.utils import generate_base_uri
from rest_framework import serializers
......@@ -43,3 +44,27 @@ class CourseCompletionsLeadersSerializer(serializers.Serializer):
title = serializers.CharField(source='user__profile__title')
avatar_url = serializers.CharField(source='user__profile__avatar_url')
completions = serializers.IntegerField()
class CourseSerializer(serializers.Serializer):
""" Serializer for Courses """
id = serializers.CharField(source='id')
name = serializers.CharField(source='display_name')
category = serializers.CharField(source='location.category')
number = serializers.CharField(source='location.course')
org = serializers.CharField(source='location.org')
uri = serializers.SerializerMethodField('get_uri')
due = serializers.DateTimeField()
start = serializers.DateTimeField()
end = serializers.DateTimeField()
def get_uri(self, course):
"""
Builds course detail uri
"""
return "{}/{}".format(generate_base_uri(self.context['request']), course.id)
class Meta:
""" Serializer/field specification """
#lookup_field = 'id'
#fields = ('id', 'name', 'category', 'number', 'org', 'uri', 'due', 'start', 'end')
......@@ -255,9 +255,11 @@ class CoursesApiTests(TestCase):
test_uri = self.base_courses_uri
response = self.do_get(test_uri)
self.assertEqual(response.status_code, 200)
self.assertGreater(len(response.data), 0)
self.assertGreater(len(response.data['results']), 0)
self.assertIsNotNone(response.data['count'])
self.assertIsNotNone(response.data['num_pages'])
matched_course = False
for course in response.data:
for course in response.data['results']:
if matched_course is False and course['id'] == self.test_course_id:
self.assertEqual(course['name'], self.test_course_name)
self.assertEqual(course['number'], self.test_course_number)
......
......@@ -35,7 +35,7 @@ from api_manager.users.serializers import UserSerializer, UserCountByCitySeriali
from api_manager.utils import generate_base_uri
from projects.models import Project, Workgroup
from projects.serializers import ProjectSerializer, BasicWorkgroupSerializer
from .serializers import CourseModuleCompletionSerializer
from .serializers import CourseModuleCompletionSerializer, CourseSerializer
from .serializers import GradeSerializer, CourseLeadersSerializer, CourseCompletionsLeadersSerializer
from lms.lib.comment_client.user import get_course_social_stats
......@@ -494,11 +494,11 @@ class CourseContentDetail(SecureAPIView):
return Response(response_data, status=status.HTTP_200_OK)
class CoursesList(SecureAPIView):
class CoursesList(SecureListAPIView):
"""
**Use Case**
CoursesList returns a collection of courses in the edX Platform. You can
CoursesList returns paginated list of courses in the edX Platform. You can
use the uri value in the response to get details of the course.
**Example Request**
......@@ -521,22 +521,12 @@ class CoursesList(SecureAPIView):
* id: The unique identifier for the course.
"""
serializer_class = CourseSerializer
def get(self, request):
"""
GET /api/courses
"""
response_data = []
def get_queryset(self):
store = modulestore()
course_descriptors = store.get_courses()
for course_descriptor in course_descriptors:
course_data = _serialize_content(
request,
course_descriptor.id,
course_descriptor
)
response_data.append(course_data)
return Response(response_data, status=status.HTTP_200_OK)
return course_descriptors
class CoursesDetail(SecureAPIView):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment