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

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

from django.db import models 

 

from backend_app.fields import JSONField 

from backend_app.models.abstract.versionedEssentialModule import ( 

VersionedEssentialModule, 

VersionedEssentialModuleSerializer, 

VersionedEssentialModuleViewSet, 

) 

from backend_app.models.country import Country 

from backend_app.models.university import University 

from backend_app.permissions.app_permissions import NoPost, NoDelete 

from backend_app.permissions.moderation import ModerationLevels 

from backend_app.utils import get_module_defaults_for_bot, revision_bot 

from backend_app.validation.validators import UsefulLinksValidator 

 

useful_link_validator = UsefulLinksValidator() 

 

UNIVERSITY_TAG_CHOICES = ( 

"accommodation", 

"administrative", 

"transport", 

"student_life", 

"other", 

) 

 

 

class UniversityTaggedItem(VersionedEssentialModule): 

moderation_level = ModerationLevels.DEPENDING_ON_SITE_SETTINGS 

 

university = models.ForeignKey( 

University, on_delete=models.PROTECT, related_name="university_tagged_items" 

) 

tag = models.CharField( 

max_length=20, 

choices=[ 

(name, name) for name in UNIVERSITY_TAG_CHOICES 

], # Choices is a list of Tuple 

) 

comment = models.CharField(default="", blank=True, max_length=5000) 

useful_links = JSONField(default=list, validators=[useful_link_validator]) 

 

class Meta: 

unique_together = ("university", "tag") 

 

 

class UniversityTaggedItemSerializer(VersionedEssentialModuleSerializer): 

class Meta: 

model = UniversityTaggedItem 

fields = VersionedEssentialModuleSerializer.Meta.fields + ( 

"university", 

"tag", 

"comment", 

"useful_links", 

) 

 

 

class UniversityTaggedItemViewSet(VersionedEssentialModuleViewSet): 

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

serializer_class = UniversityTaggedItemSerializer 

# permission_classes = (IsOwner,) 

end_point_route = "universityTaggedItems" 

filterset_fields = ("university",) 

required_filterset_fields = ("university",) 

permission_classes = VersionedEssentialModuleViewSet.permission_classes 

 

 

######################### 

######################### 

######################### 

######################### 

 

 

COUNTRY_TAG_CHOICES = ( 

"immigration", 

"administrative", 

"culture", 

"tourism", 

"transport", 

"other", 

) 

 

 

class CountryTaggedItem(VersionedEssentialModule): 

moderation_level = ModerationLevels.DEPENDING_ON_SITE_SETTINGS 

 

country = models.ForeignKey( 

Country, on_delete=models.PROTECT, related_name="country_tagged_items" 

) 

tag = models.CharField( 

max_length=20, choices=[(name, name) for name in COUNTRY_TAG_CHOICES] 

) 

comment = models.CharField(default="", blank=True, max_length=5000) 

useful_links = JSONField(default=list, validators=[useful_link_validator]) 

 

class Meta: 

unique_together = ("country", "tag") 

 

 

class CountryTaggedItemSerializer(VersionedEssentialModuleSerializer): 

class Meta: 

model = CountryTaggedItem 

fields = VersionedEssentialModuleSerializer.Meta.fields + ( 

"country", 

"tag", 

"comment", 

"useful_links", 

) 

 

 

class CountryTaggedItemViewSet(VersionedEssentialModuleViewSet): 

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

serializer_class = CountryTaggedItemSerializer 

end_point_route = "countryTaggedItems" 

filterset_fields = ("country",) 

required_filterset_fields = ("country",) 

permission_classes = (NoPost & NoDelete,) 

 

 

######################### 

######################### 

######################### 

######################### 

 

 

def initialize_all(): 

defaults = get_module_defaults_for_bot() 

for university in University.objects.all(): 

for tag in UNIVERSITY_TAG_CHOICES: 

with revision_bot(): 

UniversityTaggedItem.objects.get_or_create( 

tag=tag, university=university, defaults=defaults 

) 

 

for country in Country.objects.all(): 

for tag in COUNTRY_TAG_CHOICES: 

with revision_bot(): 

CountryTaggedItem.objects.get_or_create(tag=tag, country=country)