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
« 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
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
13class PartnerListView(ListAPIView):
14 """Returns an overview of all partners."""
16 serializer_class = PartnerSerializer
17 queryset = Partner.objects.filter(is_active=True)
18 filter_backends = (
19 framework_filters.OrderingFilter,
20 framework_filters.SearchFilter,
21 )
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)
29 ordering_fields = ("name", "pk")
30 search_fields = ("name",)
31 permission_classes = [IsAuthenticatedOrTokenHasScope]
32 required_scopes = ["partners:read"]
35class PartnerDetailView(RetrieveAPIView):
36 """Returns a single partner."""
38 serializer_class = PartnerSerializer
39 queryset = Partner.objects.filter(is_active=True)
40 permission_classes = [IsAuthenticatedOrTokenHasScope]
41 required_scopes = ["partners:read"]
44class VacancyListView(ListAPIView):
45 """Returns an overview of all vacancies."""
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"]
64class VacancyDetailView(RetrieveAPIView):
65 """Returns a single vacancy."""
67 serializer_class = VacancySerializer
68 queryset = Vacancy.objects.all()
69 permission_classes = [IsAuthenticatedOrTokenHasScope]
70 required_scopes = ["partners:read"]
73class VacancyCategoryListView(ListAPIView):
74 """Returns an overview of all vacancy categories."""
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"]