77 lines
2.6 KiB
Python
77 lines
2.6 KiB
Python
""" Django REST Framework Serializers """
|
|
|
|
from django.core.urlresolvers import reverse
|
|
from rest_framework import serializers
|
|
|
|
from courseware.courses import course_image_url
|
|
|
|
|
|
class CourseSerializer(serializers.Serializer):
|
|
""" Serializer for Courses """
|
|
id = serializers.CharField() # pylint: disable=invalid-name
|
|
name = serializers.CharField(source='display_name')
|
|
category = serializers.CharField()
|
|
org = serializers.SerializerMethodField('get_org')
|
|
run = serializers.SerializerMethodField('get_run')
|
|
course = serializers.SerializerMethodField('get_course')
|
|
uri = serializers.SerializerMethodField('get_uri')
|
|
image_url = serializers.SerializerMethodField('get_image_url')
|
|
start = serializers.DateTimeField()
|
|
end = serializers.DateTimeField()
|
|
|
|
def get_org(self, course):
|
|
""" Gets the course org """
|
|
return course.id.org
|
|
|
|
def get_run(self, course):
|
|
""" Gets the course run """
|
|
return course.id.run
|
|
|
|
def get_course(self, course):
|
|
""" Gets the course """
|
|
return course.id.course
|
|
|
|
def get_uri(self, course):
|
|
""" Builds course detail uri """
|
|
# pylint: disable=no-member
|
|
request = self.context['request']
|
|
return request.build_absolute_uri(reverse('course_structure_api:v0:detail', kwargs={'course_id': course.id}))
|
|
|
|
def get_image_url(self, course):
|
|
""" Get the course image URL """
|
|
return course_image_url(course)
|
|
|
|
|
|
class GradingPolicySerializer(serializers.Serializer):
|
|
""" Serializer for course grading policy. """
|
|
assignment_type = serializers.CharField(source='type')
|
|
count = serializers.IntegerField(source='min_count')
|
|
dropped = serializers.IntegerField(source='drop_count')
|
|
weight = serializers.FloatField()
|
|
|
|
|
|
# pylint: disable=invalid-name
|
|
class BlockSerializer(serializers.Serializer):
|
|
""" Serializer for course structure block. """
|
|
id = serializers.CharField(source='usage_key')
|
|
type = serializers.CharField(source='block_type')
|
|
display_name = serializers.CharField()
|
|
graded = serializers.BooleanField(default=False)
|
|
format = serializers.CharField()
|
|
children = serializers.CharField()
|
|
|
|
|
|
class CourseStructureSerializer(serializers.Serializer):
|
|
""" Serializer for course structure. """
|
|
root = serializers.CharField(source='root')
|
|
blocks = serializers.SerializerMethodField('get_blocks')
|
|
|
|
def get_blocks(self, structure):
|
|
""" Serialize the individual blocks. """
|
|
serialized = {}
|
|
|
|
for key, block in structure['blocks'].iteritems():
|
|
serialized[key] = BlockSerializer(block).data
|
|
|
|
return serialized
|