from django.contrib.auth.mixins import LoginRequiredMixin from django.http import HttpResponse, HttpResponseForbidden, JsonResponse from django.shortcuts import render from django.views import View from rest_framework.parsers import FormParser from rest_framework.views import APIView from core.lib.opensearch import query_single_result from core.lib.threshold import ( annotate_num_chans, annotate_num_users, get_chans, get_users, ) class InsightsSearch(LoginRequiredMixin, View): # parser_classes = [JSONParser] template_name = "ui/insights/results.html" plan_name = "drilldown" def post(self, request): if not request.user.has_plan(self.plan_name): return HttpResponseForbidden() results, context = query_single_result(request) if not context: return HttpResponseForbidden() if context: return render(request, self.template_name, context) else: return HttpResponse("No results") class InsightsInfoModal(LoginRequiredMixin, APIView): parser_classes = [FormParser] plan_name = "drilldown" template_name = "modals/insights.html" def post(self, request): if not request.user.has_plan(self.plan_name): return JsonResponse({"success": False}) if "net" not in request.data: return JsonResponse({"success": False}) if "nick" not in request.data: return JsonResponse({"success": False}) if "channel" not in request.data: return JsonResponse({"success": False}) net = request.data["net"] nick = request.data["nick"] channel = request.data["channel"] channels = get_chans(net, [nick]) users = get_users(net, [channel]) num_users = annotate_num_users(net, channels) num_chans = annotate_num_chans(net, users) if channels: inter_users = get_users(net, channels) else: inter_users = [] if users: inter_chans = get_chans(net, users) else: inter_chans = [] context = { "net": net, "nick": nick, "channel": channel, "chans": channels, "users": users, "inter_chans": inter_chans, "inter_users": inter_users, "num_users": num_users, "num_chans": num_chans, } return render(request, self.template_name, context)