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
« 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
9class UserPreferences(models.Model):
10 user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
11 preferences = models.JSONField(default=dict)
13 def __str__(self):
14 return f"{self.user.get_username()}'s preferences"
16 @property
17 def moderator(self):
18 if "moderator" not in self.preferences:
19 self.preferences["moderator"] = {}
21 return self.preferences["moderator"]
23 @moderator.setter
24 def moderator(self, value):
25 self.preferences["moderator"] = value
27 @property
28 def blur_images(self):
29 return self.moderator.get("blur_images", True)
31 @blur_images.setter
32 def blur_images(self, value):
33 self.moderator |= {"blur_images": value}
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()
43def get_moderators() -> models.QuerySet:
44 """
45 Get all users who either are members of the "Content Moderators"
46 group or have superuser privileges.
48 :return: a ``QuerySet`` of ``User``s who can perform moderation
49 """
51 User = get_user_model()
52 return User.objects.filter(
53 Q(groups__name="Content Moderators") | Q(is_superuser=True)
54 )