Coverage for website/activemembers/api/v2/serializers/member_group.py: 76.74%

35 statements  

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

1from rest_framework import serializers 

2 

3from activemembers.api.v2.serializers.member_group_membership import ( 

4 MemberGroupMembershipSerializer, 

5) 

6from activemembers.models import MemberGroup 

7from thaliawebsite.api.v2.serializers import ThumbnailSerializer 

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

9 CleanedModelSerializer, 

10) 

11 

12 

13class MemberGroupSerializer(CleanedModelSerializer): 

14 """API serializer for member groups.""" 

15 

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

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

18 

19 if "get_memberships" not in self.context and "members" in self.fields: 

20 self.fields.pop("members") 

21 

22 class Meta: 

23 """Meta class for the serializer.""" 

24 

25 model = MemberGroup 

26 fields = ( 

27 "pk", 

28 "name", 

29 "type", 

30 "description", 

31 "since", 

32 "until", 

33 "contact_address", 

34 "photo", 

35 "members", 

36 ) 

37 

38 members = serializers.SerializerMethodField("_members") 

39 type = serializers.SerializerMethodField("_type") 

40 photo = ThumbnailSerializer(placeholder="activemembers/images/placeholder.png") 

41 

42 def _members(self, instance): 

43 memberships = self.context["get_memberships"](instance).prefetch_related( 

44 "member__membergroupmembership_set" 

45 ) 

46 return MemberGroupMembershipSerializer( 

47 many=True, context=self.context 

48 ).to_representation(memberships) 

49 

50 def _type(self, instance): 

51 if hasattr(instance, "board"): 51 ↛ 52line 51 didn't jump to line 52 because the condition on line 51 was never true

52 return "board" 

53 if hasattr(instance, "committee"): 53 ↛ 55line 53 didn't jump to line 55 because the condition on line 53 was always true

54 return "committee" 

55 if hasattr(instance, "society"): 

56 return "society" 

57 return None 

58 

59 

60class MemberGroupListSerializer(MemberGroupSerializer): 

61 class Meta: 

62 """Meta class for the serializer.""" 

63 

64 model = MemberGroup 

65 fields = ( 

66 "pk", 

67 "name", 

68 "type", 

69 "description", 

70 "since", 

71 "until", 

72 "contact_address", 

73 "photo", 

74 ) 

75 

76 

77class MemberGroupShortSerializer(MemberGroupListSerializer): 

78 class Meta: 

79 model = MemberGroup 

80 fields = ( 

81 "pk", 

82 "name", 

83 "type", 

84 "since", 

85 "until", 

86 "contact_address", 

87 )