Files
edx-platform/lms/djangoapps/grades/rest_api/serializers.py

114 lines
3.7 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().to_representation(
defaultdict(lambda: None, instance)
)
)
class SectionBreakdownSerializer(serializers.Serializer):
"""
Serializer for the `section_breakdown` portion of a gradebook entry.
"""
attempted = serializers.BooleanField()
category = serializers.CharField()
label = serializers.CharField()
module_id = serializers.CharField()
percent = serializers.FloatField()
score_earned = serializers.FloatField()
score_possible = serializers.FloatField()
subsection_name = serializers.CharField()
class StudentGradebookEntrySerializer(serializers.Serializer):
"""
Serializer for student gradebook entry.
"""
user_id = serializers.IntegerField()
username = serializers.CharField()
full_name = serializers.CharField(required=False)
email = serializers.EmailField()
external_user_key = serializers.CharField(required=False)
percent = serializers.FloatField()
section_breakdown = SectionBreakdownSerializer(many=True)
class SubsectionGradeOverrideSerializer(serializers.Serializer):
"""
Serializer for subsection grade override.
"""
earned_all_override = serializers.FloatField()
possible_all_override = serializers.FloatField()
earned_graded_override = serializers.FloatField()
possible_graded_override = serializers.FloatField()
class SubsectionGradeSerializer(serializers.Serializer):
"""
Serializer for subsection grade.
"""
earned_all = serializers.FloatField()
possible_all = serializers.FloatField()
earned_graded = serializers.FloatField()
possible_graded = serializers.FloatField()
class SubsectionGradeOverrideSimpleHistorySerializer(serializers.Serializer):
"""
Serializer for subsection grade override history.
"""
created = serializers.DateTimeField()
grade_id = serializers.IntegerField()
history_id = serializers.IntegerField()
earned_all_override = serializers.FloatField()
earned_graded_override = serializers.FloatField()
override_reason = serializers.CharField()
system = serializers.CharField()
history_date = serializers.DateTimeField()
history_type = serializers.CharField()
history_user = serializers.CharField()
history_user_id = serializers.IntegerField()
id = serializers.IntegerField()
possible_all_override = serializers.FloatField()
possible_graded_override = serializers.FloatField()
class SubsectionGradeResponseSerializer(serializers.Serializer):
"""
Serializer for subsection grade response.
"""
success = serializers.BooleanField()
error_message = serializers.CharField(required=False)
subsection_id = serializers.CharField()
user_id = serializers.IntegerField()
course_id = serializers.CharField()
original_grade = SubsectionGradeSerializer()
override = SubsectionGradeOverrideSerializer()
history = SubsectionGradeOverrideSimpleHistorySerializer(many=True)