diff options
Diffstat (limited to 'ishtar_common/rest.py')
-rw-r--r-- | ishtar_common/rest.py | 56 |
1 files changed, 52 insertions, 4 deletions
diff --git a/ishtar_common/rest.py b/ishtar_common/rest.py index 2d3cefffd..b0498cea6 100644 --- a/ishtar_common/rest.py +++ b/ishtar_common/rest.py @@ -4,12 +4,13 @@ from django.conf import settings from django.db.models import Q from django.utils.translation import activate, deactivate -from rest_framework import authentication, permissions +from rest_framework import authentication, permissions, generics from rest_framework.response import Response from rest_framework.views import APIView from ishtar_common import models_rest from ishtar_common.views_item import get_item +from ishtar_common.serializers_utils import generic_get_results class IpModelPermission(permissions.BasePermission): @@ -99,10 +100,12 @@ class FacetAPIView(APIView): search_keys.append(str(search_key).lower()) deactivate() values[ct_model].append( - [f"{type.model._meta.app_label}.{type.model._meta.model_name}", - search_keys, values_ct] + [ + f"{type.model._meta.app_label}.{type.model._meta.model_name}", + search_keys, + values_ct, + ] ) - #values = json.dumps(values) return Response(values, content_type="json") def _get_base_search_model_queries(self): @@ -130,3 +133,48 @@ class FacetAPIView(APIView): return models_rest.ApiSearchModel.objects.filter( user=request.user.apiuser ).filter(q) + + +class GetAPIView(generics.RetrieveAPIView): + authentication_classes = (authentication.TokenAuthentication,) + permission_classes = (permissions.IsAuthenticated, IpModelPermission) + model = None + + def __init__(self, **kwargs): + assert self.model is not None + super().__init__(**kwargs) + + def search_model_query(self, request): + return models_rest.ApiSearchModel.objects.filter( + user=request.user.apiuser, + content_type__app_label=self.model._meta.app_label, + content_type__model=self.model._meta.model_name, + ) + + def get(self, request, *args, **kwargs): + _get_item = get_item( + self.model, + "get_" + self.model.SLUG, + self.model.SLUG, + no_permission_check=True + # TODO: own_table_cols=get_table_cols_for_ope() - adapt columns + ) + search_model = self.search_model_query(request).all()[0] + if search_model.limit_query: + request.GET._mutable = True + query = search_model.limit_query + request.GET["search_vector"] = query + request.GET._mutable = False + q = _get_item(request, data_type="json", return_query=True).filter( + pk=self.kwargs["pk"] + ) + if not q.count(): + return Response({}, content_type="json") + obj = q.all()[0] + result = obj.full_serialize() + """ + result = generic_get_results( + [self.model], "", no_geo=False, result_queryset={self.model.__name__: q} + ) + """ + return Response(result, content_type="json") |