summaryrefslogtreecommitdiff
path: root/ishtar_common/rest.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/rest.py')
-rw-r--r--ishtar_common/rest.py84
1 files changed, 76 insertions, 8 deletions
diff --git a/ishtar_common/rest.py b/ishtar_common/rest.py
index f85061b69..e489e5f80 100644
--- a/ishtar_common/rest.py
+++ b/ishtar_common/rest.py
@@ -1,7 +1,10 @@
-import json
+import datetime
+import requests
from django.conf import settings
from django.db.models import Q
+from django.http import HttpResponse
+from django.shortcuts import reverse
from django.utils.translation import activate, deactivate
from rest_framework import authentication, permissions, generics
@@ -10,8 +13,8 @@ from rest_framework.views import APIView
from ishtar_common import models_rest
from ishtar_common.models_common import GeneralType
+from ishtar_common.models_imports import Importer
from ishtar_common.views_item import get_item
-from ishtar_common.serializers_utils import generic_get_results
class IpModelPermission(permissions.BasePermission):
@@ -39,15 +42,24 @@ class SearchAPIView(APIView):
content_type__model=self.model._meta.model_name,
)
- def get(self, request, format=None):
+ def get(self, request, slug=None, format=None, data_type="json"):
+ search_model = self.search_model_query(request).all()[0]
+ # get default importer
+ if slug:
+ q = search_model.export.filter(slug=slug)
+ if not q.count():
+ return HttpResponse('Page not found', status=404)
+ table_cols, col_names = q.all()[0].get_columns()
+ else:
+ table_cols, col_names = self.model.get_columns(dict_col_labels=False)
+
_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
+ no_permission_check=True,
+ own_table_cols=table_cols
)
- search_model = self.search_model_query(request).all()[0]
if search_model.limit_query:
query = search_model.limit_query
if request.GET.get("search_vector", None):
@@ -55,13 +67,30 @@ class SearchAPIView(APIView):
request.GET._mutable = True
request.GET["search_vector"] = query
request.GET._mutable = False
- data_type = "json"
+
+ # source-1-689-source-1-1853 -> 689-1853
+ if "selected_ids" in request.GET:
+ value = request.GET["selected_ids"]
+ values = []
+ for idx, k in enumerate(value.split("-")):
+ if idx % 3 == 2:
+ values.append(k)
+ request.GET._mutable = True
+ request.GET["selected_ids"] = "-".join(values)
+ request.GET._mutable = False
+
if request.GET.get("data_type", None):
data_type = request.GET.get("data_type")
- response = _get_item(request, data_type=data_type)
+ response = _get_item(request, col_names=col_names, data_type=data_type,
+ type=data_type)
return response
+class ExportAPIView(SearchAPIView):
+ def get(self, request, slug=None, format=None, data_type="csv"):
+ return super().get(request, slug=slug, format=format, data_type=data_type)
+
+
class FacetAPIView(APIView):
authentication_classes = (authentication.TokenAuthentication,)
permission_classes = (permissions.IsAuthenticated, IpModelPermission)
@@ -78,6 +107,45 @@ class FacetAPIView(APIView):
def get(self, request, format=None):
values = {}
base_queries = self._get_base_search_model_queries()
+
+ # config
+ values["config"] = {
+ "search_columns": "",
+ "search_columns_label": "",
+ "exports": "",
+ "exports_label": ""
+ }
+ for model in self.models:
+ model_name = f"{model._meta.app_label}-{model._meta.model_name}-"
+ q = models_rest.ApiSearchModel.objects.filter(
+ user=request.user.apiuser,
+ content_type__app_label=model._meta.app_label,
+ content_type__model=model._meta.model_name
+ )
+ if not q.count():
+ continue
+ search_model = q.all()[0]
+ # cols, col_names = search_model.table_format.get_columns()
+ cols, col_names = model.get_columns(dict_col_labels=False)
+ cols, col_names = [c for c in cols if c], [c for c in col_names if c]
+ if cols and col_names:
+ if values["config"]["search_columns"]:
+ values["config"]["search_columns"] += "||"
+ values["config"]["search_columns_label"] += "||"
+ values["config"]["search_columns"] += "||".join([
+ model_name + (col[0] if isinstance(col, list) else col)
+ for col in cols
+ ])
+ values["config"]["search_columns_label"] += "||".join([
+ model_name + col for col in col_names
+ ])
+ for export in search_model.export.all():
+ if values["config"]["exports"]:
+ values["config"]["exports"] += "||"
+ values["config"]["exports_label"] += "||"
+ values["config"]["exports"] += model_name + export.slug
+ values["config"]["exports_label"] += model_name + export.name
+
for idx, select_form in enumerate(self.select_forms):
# only send types matching permissions
model, q = base_queries[idx]