83 lines
2.8 KiB
Python
83 lines
2.8 KiB
Python
"""
|
|
API Serializers
|
|
"""
|
|
from collections import defaultdict
|
|
|
|
from rest_framework import serializers
|
|
|
|
|
|
# pylint: disable=abstract-method
|
|
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()
|
|
|
|
def to_representation(self, instance):
|
|
"""
|
|
Return a representation of the grading policy.
|
|
"""
|
|
# Backwards compatibility with the behavior of DRF v2.
|
|
# When the grader dictionary was missing keys, DRF v2 would default to None;
|
|
# DRF v3 unhelpfully raises an exception.
|
|
return dict(
|
|
super(GradingPolicySerializer, self).to_representation(
|
|
defaultdict(lambda: None, instance)
|
|
)
|
|
)
|
|
|
|
|
|
class SectionBreakdownSerializer(serializers.Serializer):
|
|
"""
|
|
Serializer for the `section_breakdown` portion of a gradebook entry.
|
|
"""
|
|
are_grades_published = serializers.BooleanField()
|
|
auto_grade = serializers.BooleanField()
|
|
category = serializers.CharField()
|
|
chapter_name = serializers.CharField()
|
|
comment = serializers.CharField()
|
|
detail = serializers.CharField()
|
|
displayed_value = serializers.CharField()
|
|
is_graded = serializers.BooleanField()
|
|
grade_description = serializers.CharField()
|
|
is_ag = serializers.BooleanField()
|
|
is_average = serializers.BooleanField()
|
|
is_manually_graded = serializers.BooleanField()
|
|
label = serializers.CharField()
|
|
letter_grade = serializers.CharField()
|
|
module_id = serializers.CharField()
|
|
percent = serializers.FloatField()
|
|
score_earned = serializers.FloatField()
|
|
score_possible = serializers.FloatField()
|
|
section_block_id = serializers.CharField()
|
|
subsection_name = serializers.CharField()
|
|
|
|
|
|
class SimpleSerializer(serializers.BaseSerializer):
|
|
"""
|
|
A Serializer intended to take a dictionary of data and simply spit
|
|
that same dictionary back out as the "serialization".
|
|
"""
|
|
def to_representation(self, instance):
|
|
return instance
|
|
|
|
|
|
class StudentGradebookEntrySerializer(serializers.Serializer):
|
|
"""
|
|
Serializer for student gradebook entry.
|
|
"""
|
|
course_id = serializers.CharField()
|
|
email = serializers.CharField()
|
|
user_id = serializers.IntegerField()
|
|
username = serializers.CharField()
|
|
full_name = serializers.CharField()
|
|
passed = serializers.BooleanField()
|
|
percent = serializers.FloatField()
|
|
letter_grade = serializers.CharField()
|
|
progress_page_url = serializers.CharField()
|
|
section_breakdown = SectionBreakdownSerializer(many=True)
|
|
aggregates = SimpleSerializer()
|