from rest_framework.views import APIView import logging from django.conf import settings from django.shortcuts import render from django.http import HttpResponse, JsonResponse from django.contrib.auth.mixins import LoginRequiredMixin import json from django.views.decorators.csrf import csrf_exempt from django.views import View from rest_framework.parsers import JSONParser from core.lib.opensearch import initialise_opensearch, run_main_query client = initialise_opensearch() def query_results(request, post_params, api=False): fields = None if "fields" in request.POST: fields = request.POST.getlist("fields") if "size" in request.POST: size = request.POST["size"] if "query" in request.POST: query = request.POST["query"] results = run_main_query(client, request.user, query, fields, size) if not results: return False # pp.pprint(results) results_parsed = [] if "hits" in results.keys(): if "hits" in results["hits"]: for item in results["hits"]["hits"]: results_parsed.append(item["_source"]) context = { "query": query, "results": results_parsed, "card": results["hits"]["total"]["value"], "took": results["took"], "redacted": results["redacted"], "exemption": results["exemption"], "fields": settings.OPENSEARCH_MAIN_SEARCH_FIELDS, "sizes": settings.OPENSEARCH_MAIN_SIZES, "timescales": settings.OPENSEARCH_MAIN_TIMESCALES, } return context class Search(LoginRequiredMixin, View): #parser_classes = [JSONParser] template_name = "ui/results.html" plan_name = "drilldown" def post(self, request): if not request.user.has_plan(self.plan_name): return render(request, "denied.html") context = query_results(request, request.POST) print("context: ", context) context['data'] = json.dumps( [ { 'id': item.get('id'), 'value': item.get("sentiment", 0), 'date': item.get("ts"), } for item in context["results"] ] ) print("context['data']: ", context['data']) if context: print("OGING TO RENDER") return render(request, self.template_name, context) else: return HttpResponse("No results") class APISearch(LoginRequiredMixin, View): #parser_classes = [JSONParser] template_name = "ui/results.html" plan_name = "drilldown" def post(self, request): print("POST") if not request.user.has_plan(self.plan_name): return JsonResponse({"success": False}) print("PERMS") context = query_results(request, request.POST) print("CONTEXT", context) return JsonResponse(context)