Coverage for website/events/api/v2/admin/filters.py: 24.00%

40 statements  

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

1from rest_framework import filters 

2from rest_framework.exceptions import ValidationError 

3 

4from utils.snippets import strtobool 

5 

6 

7class PublishedFilter(filters.BaseFilterBackend): 

8 """Allows you to filter by published status.""" 

9 

10 def filter_queryset(self, request, queryset, view): 

11 published = request.query_params.get("published", None) 

12 

13 if published is not None: 

14 try: 

15 queryset = queryset.filter(published=strtobool(published)) 

16 except ValueError as e: 

17 raise ValidationError({"published": "Invalid filter value."}) from e 

18 

19 return queryset 

20 

21 def get_schema_operation_parameters(self, view): 

22 return [ 

23 { 

24 "name": "published", 

25 "required": False, 

26 "in": "query", 

27 "description": "Filter by published status", 

28 "schema": { 

29 "type": "boolean", 

30 }, 

31 } 

32 ] 

33 

34 

35class EventRegistrationCancelledFilter(filters.BaseFilterBackend): 

36 """Allows you to filter by event registration cancellation status.""" 

37 

38 def filter_queryset(self, request, queryset, view): 

39 cancelled = request.query_params.get("cancelled", None) 

40 

41 if cancelled is None: 

42 return queryset 

43 

44 try: 

45 if strtobool(cancelled): 

46 return queryset.exclude(date_cancelled=None) 

47 except ValueError as e: 

48 raise ValidationError({"cancelled": "Invalid filter value."}) from e 

49 

50 return queryset.filter(date_cancelled=None) 

51 

52 def get_schema_operation_parameters(self, view): 

53 return [ 

54 { 

55 "name": "cancelled", 

56 "required": False, 

57 "in": "query", 

58 "description": "Filter by event registration cancellation status", 

59 "schema": { 

60 "type": "boolean", 

61 }, 

62 } 

63 ] 

64 

65 

66class EventRegistrationQueuedFilter(filters.BaseFilterBackend): 

67 """Allows you to filter by event registration by if they're in the queue.""" 

68 

69 def filter_queryset(self, request, queryset, view): 

70 queued = request.query_params.get("queued", None) 

71 

72 if queued is None: 

73 return queryset 

74 

75 try: 

76 if strtobool(queued): 

77 return queryset.exclude(queue_position=None) 

78 except ValueError as e: 

79 raise ValidationError({"queued": "Invalid filter value."}) from e 

80 

81 return queryset.filter(queue_position=None) 

82 

83 def get_schema_operation_parameters(self, view): 

84 return [ 

85 { 

86 "name": "queued", 

87 "required": False, 

88 "in": "query", 

89 "description": "Filter by event registration queue position", 

90 "schema": { 

91 "type": "boolean", 

92 }, 

93 } 

94 ]