from rest_framework import serializers from core.models import ExamType, Feedback, Student, Submission, Tutor from util.factories import GradyUserFactory import logging log = logging.getLogger(__name__) user_factory = GradyUserFactory() class ExamSerializer(serializers.ModelSerializer): class Meta: model = ExamType fields = ('module_reference', 'total_score', 'pass_score', 'pass_only',) class FeedbackSerializer(serializers.ModelSerializer): class Meta: model = Feedback fields = ('text', 'score') class SubmissionSerializer(serializers.ModelSerializer): feedback = serializers.ReadOnlyField(source='feedback.text') score = serializers.ReadOnlyField(source='feedback.score') type = serializers.ReadOnlyField(source='type.name') full_score = serializers.ReadOnlyField(source='type.full_score') class Meta: model = Submission fields = ('type', 'text', 'feedback', 'score', 'full_score') class StudentSerializer(serializers.ModelSerializer): name = serializers.ReadOnlyField(source='user.fullname') user = serializers.ReadOnlyField(source='user.username') exam = ExamSerializer() submissions = SubmissionSerializer(many=True) class Meta: model = Student fields = ('name', 'user', 'exam', 'submissions') class TutorSerializer(serializers.ModelSerializer): username = serializers.CharField(source='user.username') feedback_count = serializers.IntegerField(source='get_feedback_count', read_only=True) def create(self, validated_data): log.info("Crating tutor from data %s", validated_data) return user_factory.make_tutor( username=validated_data['user']['username']) class Meta: model = Tutor fields = ('username', 'feedback_count')