Coverage for apis_core/apis_entities/api_views.py: 63%
30 statements
« prev ^ index » next coverage.py v7.5.3, created at 2025-06-25 10:00 +0000
« prev ^ index » next coverage.py v7.5.3, created at 2025-06-25 10:00 +0000
1from django.db.models import Q
2from django.shortcuts import redirect
3from drf_spectacular.utils import extend_schema, inline_serializer
4from rest_framework.exceptions import NotFound
5from rest_framework.generics import ListAPIView
6from rest_framework.permissions import AllowAny
7from rest_framework.views import APIView
9from apis_core.apis_entities.serializers import MinimalEntitySerializer
10from apis_core.apis_entities.utils import get_entity_classes
11from apis_core.apis_metainfo.models import RootObject
12from apis_core.utils.filters import CustomSearchFilter
15class GetEntityGeneric(APIView):
16 permission_classes = [AllowAny]
18 @extend_schema(
19 responses=inline_serializer(name="GetEntityGenericSerializer", fields={})
20 )
21 def get(self, request, pk):
22 try:
23 obj = RootObject.objects_inheritance.get_subclass(id=pk)
24 return redirect(obj.get_api_detail_endpoint())
25 except RootObject.DoesNotExist:
26 raise NotFound
29class ListEntityGeneric(ListAPIView):
30 serializer_class = MinimalEntitySerializer
31 filter_backends = [CustomSearchFilter]
33 def get_queryset(self):
34 entities = get_entity_classes()
35 entities = [entity._meta.model_name for entity in entities]
36 q = Q()
37 for entity in entities:
38 q |= Q(**{f"{entity}__isnull": False})
39 return RootObject.objects_inheritance.select_subclasses().filter(q)