Coverage for apps / profiles / utils.py: 73%

30 statements  

« prev     ^ index     » next       coverage.py v7.13.4, created at 2026-02-14 19:13 +0000

1"""Profile utilities.""" 

2 

3from asgiref.sync import sync_to_async 

4from django.http import Http404 

5 

6from .models import Profile 

7 

8 

9def get_current_profile(request): 

10 """ 

11 Get the current profile from the session. 

12 

13 Raises Http404 if no profile is selected. 

14 """ 

15 profile_id = request.session.get("profile_id") 

16 if not profile_id: 

17 raise Http404("No profile selected") 

18 

19 try: 

20 return Profile.objects.get(id=profile_id) 

21 except Profile.DoesNotExist: 

22 raise Http404("Profile not found") 

23 

24 

25def get_current_profile_or_none(request): 

26 """ 

27 Get the current profile from the session, or None if not set. 

28 

29 Use this for endpoints that work with or without a profile, 

30 but need to apply profile-based filtering when one is present. 

31 """ 

32 profile_id = request.session.get("profile_id") 

33 if not profile_id: 

34 return None 

35 

36 try: 

37 return Profile.objects.get(id=profile_id) 

38 except Profile.DoesNotExist: 

39 return None 

40 

41 

42async def aget_current_profile_or_none(request): 

43 """ 

44 Async version of get_current_profile_or_none. 

45 

46 Use this in async views/endpoints. 

47 """ 

48 

49 @sync_to_async 

50 def _get_profile(): 

51 profile_id = request.session.get("profile_id") 

52 if not profile_id: 

53 return None 

54 try: 

55 return Profile.objects.get(id=profile_id) 

56 except Profile.DoesNotExist: 

57 return None 

58 

59 return await _get_profile() 

← Back to Dashboard