Coverage for website/members/api/v2/serializers/profile.py: 91.67%

30 statements  

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

1from rest_framework import serializers 

2 

3from members.models import Profile 

4from thaliawebsite.api.v2.serializers import ThumbnailSerializer 

5from thaliawebsite.api.v2.serializers.cleaned_model_serializer import ( 

6 CleanedModelSerializer, 

7) 

8 

9 

10class ProfileSerializer(CleanedModelSerializer): 

11 def __init__(self, *args, **kwargs): 

12 # Don't pass the 'fields' arg up to the superclass 

13 fields = kwargs.pop("fields", None) 

14 self.force_show_birthday = kwargs.pop("force_show_birthday", False) 

15 

16 # Instantiate the superclass normally 

17 super().__init__(*args, **kwargs) 

18 

19 if fields: 19 ↛ exitline 19 didn't return from function '__init__' because the condition on line 19 was always true

20 allowed = set(fields) 

21 existing = set(self.fields.keys()) 

22 for field_name in existing - allowed: 

23 self.fields.pop(field_name) 

24 

25 class Meta: 

26 model = Profile 

27 fields = "__all__" 

28 read_only_fields = ["name", "starting_year", "programme", "birthday"] 

29 

30 display_name = serializers.SerializerMethodField("_display_name") 

31 short_display_name = serializers.SerializerMethodField("_short_display_name") 

32 birthday = serializers.SerializerMethodField("_birthday") 

33 

34 photo = ThumbnailSerializer( 

35 size_small="small", 

36 size_medium="medium", 

37 size_large="avatar_large", 

38 placeholder="members/images/default-avatar.jpg", 

39 ) 

40 

41 def _short_display_name(self, instance): 

42 return instance.short_display_name() 

43 

44 def _display_name(self, instance): 

45 return instance.display_name() 

46 

47 def _birthday(self, instance): 

48 if instance.show_birthday or self.force_show_birthday: 48 ↛ 50line 48 didn't jump to line 50 because the condition on line 48 was always true

49 return instance.birthday 

50 return None