Coverage for website/events/api/v2/serializers/event_registration.py: 60.00%

28 statements  

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

1from rest_framework import serializers 

2 

3from events.models import EventRegistration 

4from members.api.v2.serializers.member import MemberSerializer 

5from payments.api.v2.serializers import PaymentSerializer 

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

7 CleanedModelSerializer, 

8) 

9 

10 

11class EventRegistrationSerializer(CleanedModelSerializer): 

12 """Serializer for event registrations.""" 

13 

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

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

16 fields = kwargs.pop("fields", {"pk", "member", "name"}) 

17 

18 # Instantiate the superclass normally 

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

20 

21 allowed = set(fields) 

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

23 for field_name in existing - allowed: 

24 self.fields.pop(field_name) 

25 

26 class Meta: 

27 model = EventRegistration 

28 fields = ( 

29 "pk", 

30 "present", 

31 "queue_position", 

32 "date", 

33 "payment", 

34 "member", 

35 "name", 

36 "is_cancelled", 

37 "is_late_cancellation", 

38 ) 

39 

40 payment = PaymentSerializer() 

41 member = MemberSerializer(detailed=False, read_only=True) 

42 is_cancelled = serializers.SerializerMethodField("_is_cancelled") 

43 is_late_cancellation = serializers.SerializerMethodField("_is_late_cancellation") 

44 queue_position = serializers.SerializerMethodField("_queue_position") 

45 

46 def _is_late_cancellation(self, instance): 

47 return instance.is_late_cancellation() 

48 

49 def _queue_position(self, instance): 

50 pos = instance.queue_position 

51 return pos if pos and pos > 0 else None 

52 

53 def _is_cancelled(self, instance): 

54 return instance.date_cancelled is not None