Coverage for website/partners/api/v2/views.py: 88.00%

48 statements  

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

1from oauth2_provider.contrib.rest_framework import IsAuthenticatedOrTokenHasScope 

2from rest_framework import filters as framework_filters 

3from rest_framework.generics import ListAPIView, RetrieveAPIView 

4 

5from partners.api.v2 import filters 

6from partners.api.v2.serializers import VacancyCategorySerializer 

7from partners.api.v2.serializers.partner import PartnerSerializer 

8from partners.api.v2.serializers.vacancy import VacancySerializer 

9from partners.models import Partner, Vacancy, VacancyCategory 

10from utils.media.services import fetch_thumbnails 

11 

12 

13class PartnerListView(ListAPIView): 

14 """Returns an overview of all partners.""" 

15 

16 serializer_class = PartnerSerializer 

17 queryset = Partner.objects.filter(is_active=True) 

18 filter_backends = ( 

19 framework_filters.OrderingFilter, 

20 framework_filters.SearchFilter, 

21 ) 

22 

23 def get_serializer(self, *args, **kwargs): 

24 if len(args) > 0: 

25 partners = args[0] 

26 fetch_thumbnails([partner.logo for partner in partners]) 

27 return super().get_serializer(*args, **kwargs) 

28 

29 ordering_fields = ("name", "pk") 

30 search_fields = ("name",) 

31 permission_classes = [IsAuthenticatedOrTokenHasScope] 

32 required_scopes = ["partners:read"] 

33 

34 

35class PartnerDetailView(RetrieveAPIView): 

36 """Returns a single partner.""" 

37 

38 serializer_class = PartnerSerializer 

39 queryset = Partner.objects.filter(is_active=True) 

40 permission_classes = [IsAuthenticatedOrTokenHasScope] 

41 required_scopes = ["partners:read"] 

42 

43 

44class VacancyListView(ListAPIView): 

45 """Returns an overview of all vacancies.""" 

46 

47 serializer_class = VacancySerializer 

48 queryset = Vacancy.objects.all().prefetch_related("categories") 

49 filter_backends = ( 

50 framework_filters.OrderingFilter, 

51 framework_filters.SearchFilter, 

52 filters.VacancyPartnerFilter, 

53 filters.VacancyCategoryFilter, 

54 ) 

55 ordering_fields = ("title", "pk") 

56 search_fields = ( 

57 "title", 

58 "company_name", 

59 ) 

60 permission_classes = [IsAuthenticatedOrTokenHasScope] 

61 required_scopes = ["partners:read"] 

62 

63 

64class VacancyDetailView(RetrieveAPIView): 

65 """Returns a single vacancy.""" 

66 

67 serializer_class = VacancySerializer 

68 queryset = Vacancy.objects.all() 

69 permission_classes = [IsAuthenticatedOrTokenHasScope] 

70 required_scopes = ["partners:read"] 

71 

72 

73class VacancyCategoryListView(ListAPIView): 

74 """Returns an overview of all vacancy categories.""" 

75 

76 serializer_class = VacancyCategorySerializer 

77 queryset = VacancyCategory.objects.all() 

78 filter_backends = ( 

79 framework_filters.OrderingFilter, 

80 framework_filters.SearchFilter, 

81 ) 

82 ordering_fields = ("name", "slug") 

83 search_fields = ("name",) 

84 permission_classes = [IsAuthenticatedOrTokenHasScope] 

85 required_scopes = ["partners:read"]