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
« prev ^ index » next coverage.py v7.6.7, created at 2025-08-14 10:31 +0000
1import os
2from itertools import zip_longest
4from django.core.validators import FileExtensionValidator, MinValueValidator
5from django.db import models
6from django.urls import reverse
7from django.utils.text import slugify
9from thumbnails.fields import ImageField
11from utils.media.services import get_upload_to_function
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)
20thabloid_cover_filename = get_upload_to_function("thabloids/covers")
23def pagesets(count):
24 if count < 1:
25 return []
26 pageiter = iter(range(2, count))
27 return [(1, None)] + list(zip_longest(pageiter, pageiter))
30class Thabloid(models.Model):
31 """Model representing a Thabloid."""
33 year = models.IntegerField(
34 verbose_name="academic year", validators=[MinValueValidator(1990)]
35 )
37 issue = models.IntegerField()
39 file = models.FileField(
40 upload_to=thabloid_filename,
41 validators=[FileExtensionValidator(["pdf"])],
42 )
44 cover = ImageField(upload_to=thabloid_cover_filename, resize_source_to="source")
46 class Meta:
47 """Meta class for Thabloid model."""
49 unique_together = (
50 "year",
51 "issue",
52 )
53 ordering = ("-year", "-issue")
55 def __str__(self):
56 """Return string representation of a Thabloid object."""
57 return f"Thabloid {self.year}-{self.year + 1}, #{self.issue}"
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 )