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

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 _ 

5 

6from queryable_properties.managers import QueryablePropertiesManager 

7from queryable_properties.properties import queryable_property 

8 

9from members.models import Member 

10 

11 

12class ThabloidUser(Member): 

13 class Meta: 

14 verbose_name = _("Thabloid user") 

15 verbose_name_plural = _("Thabloid users") 

16 proxy = True 

17 

18 objects = QueryablePropertiesManager() 

19 

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 ) 

28 

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 

33 

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 

38 

39 def __str__(self): 

40 return f"Thabliod user ({self.username})" 

41 

42 

43class BlacklistedThabloidUser(models.Model): 

44 class Meta: 

45 verbose_name = _("Blacklisted Thabloid user") 

46 verbose_name_plural = _("Blacklisted Thabloid users") 

47 

48 thabloid_user = models.OneToOneField( 

49 ThabloidUser, 

50 on_delete=models.CASCADE, 

51 ) 

52 

53 def __str__(self): 

54 return f"Blacklisted Thabloid user ({self.thabloid_user.username})"