Coverage for website/partners/templatetags/partner_banners.py: 95.24%
19 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 random import sample
3from django import template
5from partners.models import Partner
6from utils.media.services import fetch_thumbnails
8register = template.Library()
11@register.inclusion_tag("partners/banners.html", takes_context=True)
12def render_partner_banners(context):
13 """Render the partner banner."""
14 request = context["request"]
15 all_partners = Partner.objects.filter(is_active=True).order_by("id")
16 ids = [partner.id for partner in all_partners]
18 # check if partners have changed; if so, update sequence in session
19 if ( 19 ↛ 28line 19 didn't jump to line 28
20 "partner_sequence" not in request.session
21 or "partner_ids" not in request.session
22 or request.session["partner_ids"] != ids
23 ):
24 # Store a list of partner ids to allow checking for changes in partners
25 request.session["partner_ids"] = ids
26 request.session["partner_sequence"] = sample(ids, len(ids))
28 sequence = request.session["partner_sequence"]
29 chosen, rest = sequence[:4], sequence[4:]
30 request.session["partner_sequence"] = rest + chosen
32 partners = [p for p in all_partners if p.id in chosen]
33 fetch_thumbnails(
34 [p.alternate_logo or p.logo for p in partners],
35 "fit_medium",
36 )
38 return {
39 "partners": partners,
40 "thumb_size": "fit_medium",
41 }