summaryrefslogtreecommitdiff
path: root/ishtar_common/rest.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2021-11-06 00:22:56 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2022-12-12 12:20:59 +0100
commit905dfbb0ebb91af7b7acaae256306f178863c57f (patch)
treef9a0ceb1b16a84c1ae4cb56a32115409c092bf73 /ishtar_common/rest.py
parentdfb5da2d29eeb1c9e4b81ea9bc8c883409780bc5 (diff)
downloadIshtar-905dfbb0ebb91af7b7acaae256306f178863c57f.tar.bz2
Ishtar-905dfbb0ebb91af7b7acaae256306f178863c57f.zip
Syndication - WIP serialization
Diffstat (limited to 'ishtar_common/rest.py')
-rw-r--r--ishtar_common/rest.py56
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")