Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

from django.db import models 

from rest_framework import serializers 

 

from backend_app.models.abstract.module import Module, ModuleSerializer, ModuleViewSet 

from backend_app.models.university import University 

from backend_app.permissions.moderation import ModerationLevels 

 

 

def semester_error(semester_name): 

raise serializers.ValidationError( 

"Inconsistent {} semester dates".format(semester_name) 

) 

 

 

class UniversitySemestersDates(Module): 

moderation_level = ModerationLevels.DEPENDING_ON_SITE_SETTINGS 

 

university = models.OneToOneField( 

University, 

on_delete=models.PROTECT, 

related_name="university_semesters_dates", 

primary_key=True, 

null=False, 

) 

 

spring_begin = models.DateField(null=True, blank=True) 

spring_end = models.DateField(null=True, blank=True) 

autumn_begin = models.DateField(null=True, blank=True) 

autumn_end = models.DateField(null=True, blank=True) 

 

 

class UniversitySemestersDatesSerializer(ModuleSerializer): 

def validate(self, attrs): 

attrs = super().validate(attrs) 

 

s_b, s_e = attrs["spring_begin"], attrs["spring_end"] 

a_b, a_e = attrs["autumn_begin"], attrs["autumn_end"] 

 

def test(begin, end, name): 

ok = (begin is None and end is None) or ( 

begin is not None and end is not None 

) 

if not ok: 

semester_error(name) 

if begin is not None and (begin > end): 

semester_error(name) 

 

test(s_b, s_e, "spring") 

test(a_b, a_e, "autumn") 

 

return attrs 

 

class Meta: 

model = UniversitySemestersDates 

fields = ModuleSerializer.Meta.fields + ( 

"university", 

"spring_begin", 

"spring_end", 

"autumn_begin", 

"autumn_end", 

) 

 

 

class UniversitySemestersDatesViewSet(ModuleViewSet): 

permission_classes = ModuleViewSet.permission_classes 

queryset = UniversitySemestersDates.objects.all() # pylint: disable=E1101 

serializer_class = UniversitySemestersDatesSerializer 

end_point_route = "universitiesSemestersDates"