Coverage for api/models/moderation.py: 57%

33 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-10-07 06:14 +0000

1from django.conf import settings 

2from django.contrib.auth import get_user_model 

3from django.db import models 

4from django.db.models import Q 

5from django.db.models.signals import post_save 

6from django.dispatch import receiver 

7 

8 

9class UserPreferences(models.Model): 

10 user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) 

11 preferences = models.JSONField(default=dict) 

12 

13 def __str__(self): 

14 return f"{self.user.get_username()}'s preferences" 

15 

16 @property 

17 def moderator(self): 

18 if "moderator" not in self.preferences: 

19 self.preferences["moderator"] = {} 

20 

21 return self.preferences["moderator"] 

22 

23 @moderator.setter 

24 def moderator(self, value): 

25 self.preferences["moderator"] = value 

26 

27 @property 

28 def blur_images(self): 

29 return self.moderator.get("blur_images", True) 

30 

31 @blur_images.setter 

32 def blur_images(self, value): 

33 self.moderator |= {"blur_images": value} 

34 

35 

36@receiver(post_save, sender=settings.AUTH_USER_MODEL) 

37def create_or_update_user_profile(sender, instance, created, **kwargs): 

38 if created: 

39 UserPreferences.objects.create(user=instance) 

40 instance.userpreferences.save() 

41 

42 

43def get_moderators() -> models.QuerySet: 

44 """ 

45 Get all users who either are members of the "Content Moderators" 

46 group or have superuser privileges. 

47 

48 :return: a ``QuerySet`` of ``User``s who can perform moderation 

49 """ 

50 

51 User = get_user_model() 

52 return User.objects.filter( 

53 Q(groups__name="Content Moderators") | Q(is_superuser=True) 

54 )