Skip to content
Snippets Groups Projects
serializers.py 4.2 KiB
Newer Older
  • Learn to ignore specific revisions
  • Bodor Máté's avatar
    Bodor Máté committed
    from rest_framework import serializers
    
    from django.utils import timezone
    
    from account.models import Profile
    
    Bodor Máté's avatar
    Bodor Máté committed
    from . import models
    
    Bodor Máté's avatar
    Bodor Máté committed
    from common import email
    
    from common.middleware import CurrentUserMiddleware
    
    Bodor Máté's avatar
    Bodor Máté committed
    
    
    class TaskSerializer(serializers.ModelSerializer):
        class Meta:
            model = models.Task
    
            read_only_fields = ('created_by', 'created_at', 'updated_at')
    
            fields = '__all__'
    
    Bodor Máté's avatar
    Bodor Máté committed
    
    
    Bodor Mate's avatar
    Bodor Mate committed
        def validate(self, data):
            if timezone.now() >= data['deadline']:
    
    Rafael László's avatar
    Rafael László committed
                raise serializers.ValidationError(
                    'Please, enter appropriate deadline.')
    
    Bodor Mate's avatar
    Bodor Mate committed
            return data
    
    
        def create(self, validated_data):
    
    Rafael László's avatar
    Rafael László committed
            profiles = Profile.objects.filter(
                role="Student").exclude(
                user__email='')
    
    Bodor Máté's avatar
    Bodor Máté committed
            for profile in profiles:
                email.new_homework(profile.user, validated_data.get('deadline'))
    
            return self.Meta.model.objects.create(**validated_data)
    
    
    Rafael László's avatar
    Rafael László committed
    
    
    class SolutionSerializer_Student(serializers.ModelSerializer):
    
    Bodor Máté's avatar
    Bodor Máté committed
        class Meta:
            model = models.Solution
    
    Rafael László's avatar
    Rafael László committed
            read_only_fields = (
                'created_by',
                'created_at',
                'updated_at',
                'ready',
                'files')
    
    Bodor Máté's avatar
    Bodor Máté committed
                'id',
    
                'task',
                'created_at',
                'updated_at',
                'accepted',
                'files',
                'created_by',
                'corrected',
                'note',
            )
    
        def validate_task(self, value):
            if timezone.now() > value.deadline:
    
                raise serializers.ValidationError('You late.')
    
    Bodor Máté's avatar
    Bodor Máté committed
        def validate_accepted(self, value):
    
    Rafael László's avatar
    Rafael László committed
            raise serializers.ValidationError(
                "You don't have permission to modify accepted!")
    
    
        def validate_corrected(self, value):
    
    Rafael László's avatar
    Rafael László committed
            raise serializers.ValidationError(
                "You don't have permission to modify corrected!")
    
    
        def validate_note(self, value):
            if value != '':
    
    Rafael László's avatar
    Rafael László committed
                raise serializers.ValidationError(
                    "You don't have permission to create note!")
    
            return value
    
        def update(self, instance, validated_data):
    
    Rafael László's avatar
    Rafael László committed
            if instance.corrected is not True and validated_data.get(
                    'corrected', instance.corrected) is True:
    
                email.homework_corrected(
                    instance.created_by.user,
                    instance.task.title,
                    validated_data.get('accepted', instance.accepted)
                )
            return super().update(instance, validated_data)
    
        def create(self, validated_data):
    
            profile = CurrentUserMiddleware.get_current_user_profile()
    
    Rafael László's avatar
    Rafael László committed
            models.Solution.objects.filter(
                created_by=profile,
                task=validated_data['task']).delete()
    
            return super().create(validated_data)
    
    
    Rafael László's avatar
    Rafael László committed
    
    
    class SolutionSerializer_Staff(serializers.ModelSerializer):
        class Meta:
            model = models.Solution
    
    Rafael László's avatar
    Rafael László committed
            read_only_fields = (
                'created_by',
                'created_at',
                'updated_at',
                'ready',
                'files')
    
            fields = (
                'id',
                'task',
                'created_at',
                'updated_at',
                'accepted',
                'files',
                'created_by',
                'corrected',
                'note',
            )
    
        def validate_task(self, value):
            if timezone.now() > value.deadline:
                raise serializers.ValidationError('You late.')
            return value
    
        def validate_accepted(self, value):
    
    Bodor Máté's avatar
    Bodor Máté committed
            return value
    
        def validate_corrected(self, value):
            return value
    
        def validate_note(self, value):
            return value
    
    
        def update(self, instance, validated_data):
    
    Rafael László's avatar
    Rafael László committed
            if instance.corrected is not True and validated_data.get(
                    'corrected', instance.corrected) is True:
    
    Bodor Máté's avatar
    Bodor Máté committed
                email.homework_corrected(
                    instance.created_by.user,
                    instance.task.title,
                    validated_data.get('accepted', instance.accepted)
                )
    
            return super().update(instance, validated_data)
    
    
        def create(self, validated_data):
            profile = CurrentUserMiddleware.get_current_user_profile()
    
    Rafael László's avatar
    Rafael László committed
            models.Solution.objects.filter(
                created_by=profile,
                task=validated_data['task']).delete()
            return super().create(validated_data)