Coverage for website/thabloid/models/thabloid.py: 70.97%

29 statements  

« prev     ^ index     » next       coverage.py v7.6.7, created at 2025-08-14 10:31 +0000

1import os 

2from itertools import zip_longest 

3 

4from django.core.validators import FileExtensionValidator, MinValueValidator 

5from django.db import models 

6from django.urls import reverse 

7from django.utils.text import slugify 

8 

9from thumbnails.fields import ImageField 

10 

11from utils.media.services import get_upload_to_function 

12 

13 

14def thabloid_filename(instance, filename): 

15 """Return path of thabloid.""" 

16 ext = os.path.splitext(filename)[1] 

17 return os.path.join("thabloids/", slugify(instance) + ext) 

18 

19 

20thabloid_cover_filename = get_upload_to_function("thabloids/covers") 

21 

22 

23def pagesets(count): 

24 if count < 1: 

25 return [] 

26 pageiter = iter(range(2, count)) 

27 return [(1, None)] + list(zip_longest(pageiter, pageiter)) 

28 

29 

30class Thabloid(models.Model): 

31 """Model representing a Thabloid.""" 

32 

33 year = models.IntegerField( 

34 verbose_name="academic year", validators=[MinValueValidator(1990)] 

35 ) 

36 

37 issue = models.IntegerField() 

38 

39 file = models.FileField( 

40 upload_to=thabloid_filename, 

41 validators=[FileExtensionValidator(["pdf"])], 

42 ) 

43 

44 cover = ImageField(upload_to=thabloid_cover_filename, resize_source_to="source") 

45 

46 class Meta: 

47 """Meta class for Thabloid model.""" 

48 

49 unique_together = ( 

50 "year", 

51 "issue", 

52 ) 

53 ordering = ("-year", "-issue") 

54 

55 def __str__(self): 

56 """Return string representation of a Thabloid object.""" 

57 return f"Thabloid {self.year}-{self.year + 1}, #{self.issue}" 

58 

59 def get_absolute_url(self): 

60 """Get url of Thabloid.""" 

61 return reverse( 

62 "thabloid:detail", kwargs={"year": self.year, "issue": self.issue} 

63 )