Coverage for website/thabloid/models/thabloid_user.py: 96.88%
32 statements
« prev ^ index » next coverage.py v7.6.7, created at 2025-08-14 10:31 +0000
« prev ^ index » next coverage.py v7.6.7, created at 2025-08-14 10:31 +0000
1from django.db import models
2from django.db.models import BooleanField
3from django.db.models.expressions import Case, When
4from django.utils.translation import gettext_lazy as _
6from queryable_properties.managers import QueryablePropertiesManager
7from queryable_properties.properties import queryable_property
9from members.models import Member
12class ThabloidUser(Member):
13 class Meta:
14 verbose_name = _("Thabloid user")
15 verbose_name_plural = _("Thabloid users")
16 proxy = True
18 objects = QueryablePropertiesManager()
20 @queryable_property(annotation_based=True)
21 @classmethod
22 def wants_thabloid(cls):
23 return Case(
24 When(blacklistedthabloiduser__isnull=False, then=False),
25 default=True,
26 output_field=BooleanField(),
27 )
29 def allow_thabloid(self):
30 """Unmark that the user wants to receive the Thabloid."""
31 deleted, _ = BlacklistedThabloidUser.objects.filter(thabloid_user=self).delete()
32 return deleted > 0
34 def disallow_thabloid(self):
35 """Mark that the user does want to receive the Thabloid."""
36 created, _ = BlacklistedThabloidUser.objects.get_or_create(thabloid_user=self)
37 return created
39 def __str__(self):
40 return f"Thabliod user ({self.username})"
43class BlacklistedThabloidUser(models.Model):
44 class Meta:
45 verbose_name = _("Blacklisted Thabloid user")
46 verbose_name_plural = _("Blacklisted Thabloid users")
48 thabloid_user = models.OneToOneField(
49 ThabloidUser,
50 on_delete=models.CASCADE,
51 )
53 def __str__(self):
54 return f"Blacklisted Thabloid user ({self.thabloid_user.username})"