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

1from random import sample 

2 

3from django import template 

4 

5from partners.models import Partner 

6from utils.media.services import fetch_thumbnails 

7 

8register = template.Library() 

9 

10 

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] 

17 

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)) 

27 

28 sequence = request.session["partner_sequence"] 

29 chosen, rest = sequence[:4], sequence[4:] 

30 request.session["partner_sequence"] = rest + chosen 

31 

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 ) 

37 

38 return { 

39 "partners": partners, 

40 "thumb_size": "fit_medium", 

41 }