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

from django.contrib.contenttypes.fields import GenericForeignKey 

from django.contrib.contenttypes.models import ContentType 

from django.db import models 

from rest_framework import serializers 

 

from backend_app.fields import JSONField 

from backend_app.models.abstract.base import ( 

BaseModel, 

BaseModelSerializer, 

BaseModelViewSet, 

) 

from backend_app.permissions.app_permissions import ReadOnly 

from base_app.models import User 

 

 

class PendingModeration(BaseModel): 

""" 

Model to hold models instances that are pending moderation. 

""" 

 

content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) 

object_id = models.CharField(max_length=100) # 100 should be ok 

referenced_object = GenericForeignKey("content_type", "object_id") 

 

updated_by = models.ForeignKey(User, on_delete=models.CASCADE) 

updated_on = models.DateTimeField(null=True) 

 

# Object pending moderation 

# No validation of the JSON it's used internally only and the data is 

# validated before arriving here. 

new_object = JSONField(default=dict) 

 

class Meta: 

unique_together = ("content_type", "object_id") 

 

 

class PendingModerationSerializer(BaseModelSerializer): 

""" 

Serializer for the Pending Moderation Model 

""" 

 

content_type = serializers.CharField(read_only=True) 

object_id = serializers.CharField(read_only=True) 

 

updated_by = serializers.CharField(read_only=True) 

updated_on = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", read_only=True) 

 

new_object = serializers.JSONField(read_only=True) 

 

class Meta: 

model = PendingModeration 

fields = BaseModelSerializer.Meta.fields + ( 

"content_type", 

"object_id", 

"updated_by", 

"updated_on", 

"new_object", 

) 

 

 

class PendingModerationViewSet(BaseModelViewSet): 

""" 

Viewset for the pending moderation model. 

""" 

 

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

serializer_class = PendingModerationSerializer 

end_point_route = "pendingModeration" 

 

 

class PendingModerationObjViewSet(BaseModelViewSet): 

""" 

Viewset to retrieve the pending moderation data for an object 

""" 

 

serializer_class = PendingModerationSerializer 

permission_classes = (ReadOnly,) 

end_point_route = ( 

r"pendingModerationObj/(?P<content_type_id>[0-9]+)/(?P<object_pk>[0-9A-Za-z]+)" 

) 

 

def get_queryset(self): 

content_type_id = self.kwargs["content_type_id"] 

object_pk = self.kwargs["object_pk"] 

return PendingModeration.objects.filter( 

content_type=content_type_id, object_id=object_pk 

)