Coverage for api\views\discipline.py: 97%

31 statements  

« prev     ^ index     » next       coverage.py v7.10.7, created at 2025-10-13 15:18 +0200

1""" 

2Module de vues pour la gestion des disciplines sportives. 

3 

4Ce module contient toutes les vues nécessaires pour effectuer des opérations CRUD 

5sur les disciplines, ainsi que des fonctionnalités de recherche par nom. 

6""" 

7 

8import rest_framework.generics 

9from django.db.models import Q 

10from api.models.discipline import Discipline 

11from api.serializers.discipline import DisciplineSerializer 

12from authentication.permissions import IsAdmin 

13from rest_framework.permissions import IsAuthenticated, AllowAny 

14 

15 

16class DisciplineListView(rest_framework.generics.ListAPIView): 

17 """ 

18 Vue pour lister les disciplines avec possibilité de recherche. 

19 

20 Permet de récupérer la liste des disciplines sportives disponibles. 

21 Supporte la recherche par nom via le paramètre 'search'. 

22 Les résultats sont triés par ordre alphabétique du nom. 

23 Accessible à tous les utilisateurs (authentifiés ou non). 

24 

25 :cvar serializer_class: Sérialiseur utilisé pour la vue 

26 :type serializer_class: DisciplineSerializer 

27 :cvar permission_classes: Permissions requises pour accéder à la vue 

28 :type permission_classes: list 

29 """ 

30 serializer_class = DisciplineSerializer 

31 permission_classes = [AllowAny] 

32 

33 def get_queryset(self): 

34 """ 

35 Récupère le queryset des disciplines avec filtrage optionnel. 

36 

37 :return: Les disciplines filtrées et triées par nom 

38 :rtype: QuerySet[Discipline] 

39 """ 

40 queryset = Discipline.objects.all() 

41 search = self.request.GET.get('search', None) 

42 if search: 

43 queryset = queryset.filter(Q(nom__istartswith=search)) 

44 return queryset.order_by('nom') 

45 

46 

47class DisciplineDetailView(rest_framework.generics.RetrieveAPIView): 

48 """ 

49 Vue pour récupérer les détails d'une discipline spécifique. 

50 

51 Permet de récupérer les informations détaillées d'une discipline 

52 via son identifiant unique. 

53 Accessible à tous les utilisateurs (authentifiés ou non). 

54 

55 :cvar queryset: Queryset des disciplines 

56 :type queryset: QuerySet[Discipline] 

57 :cvar serializer_class: Sérialiseur utilisé pour la vue 

58 :type serializer_class: DisciplineSerializer 

59 :cvar permission_classes: Permissions requises pour accéder à la vue 

60 :type permission_classes: list 

61 """ 

62 queryset = Discipline.objects.all() 

63 serializer_class = DisciplineSerializer 

64 permission_classes = [AllowAny] 

65 

66 

67class DisciplineCreateView(rest_framework.generics.CreateAPIView): 

68 """ 

69 Vue pour créer une nouvelle discipline. 

70 

71 Permet aux administrateurs authentifiés de créer de nouvelles disciplines sportives. 

72 Nécessite une authentification et des permissions d'administrateur. 

73 

74 :cvar queryset: Queryset des disciplines 

75 :type queryset: QuerySet[Discipline] 

76 :cvar serializer_class: Sérialiseur utilisé pour la vue 

77 :type serializer_class: DisciplineSerializer 

78 :cvar permission_classes: Permissions requises pour accéder à la vue 

79 :type permission_classes: list 

80 """ 

81 queryset = Discipline.objects.all() 

82 serializer_class = DisciplineSerializer 

83 permission_classes = [IsAuthenticated, IsAdmin] 

84 

85 

86class DisciplineUpdateView(rest_framework.generics.UpdateAPIView): 

87 """ 

88 Vue pour mettre à jour une discipline existante. 

89 

90 Permet aux administrateurs authentifiés de modifier les informations 

91 d'une discipline existante. 

92 Nécessite une authentification et des permissions d'administrateur. 

93 

94 :cvar queryset: Queryset des disciplines 

95 :type queryset: QuerySet[Discipline] 

96 :cvar serializer_class: Sérialiseur utilisé pour la vue 

97 :type serializer_class: DisciplineSerializer 

98 :cvar permission_classes: Permissions requises pour accéder à la vue 

99 :type permission_classes: list 

100 """ 

101 queryset = Discipline.objects.all() 

102 serializer_class = DisciplineSerializer 

103 permission_classes = [IsAuthenticated, IsAdmin] 

104 

105 

106class DisciplineDeleteView(rest_framework.generics.DestroyAPIView): 

107 """ 

108 Vue pour supprimer une discipline. 

109 

110 Permet aux administrateurs authentifiés de supprimer une discipline existante. 

111 Nécessite une authentification et des permissions d'administrateur. 

112 

113 :cvar queryset: Queryset des disciplines 

114 :type queryset: QuerySet[Discipline] 

115 :cvar serializer_class: Sérialiseur utilisé pour la vue 

116 :type serializer_class: DisciplineSerializer 

117 :cvar permission_classes: Permissions requises pour accéder à la vue 

118 :type permission_classes: list 

119 """ 

120 queryset = Discipline.objects.all() 

121 serializer_class = DisciplineSerializer 

122 permission_classes = [IsAuthenticated, IsAdmin]