import logging from django.contrib.auth.mixins import LoginRequiredMixin from django.http import HttpResponse, JsonResponse from rest_framework.parsers import FormParser from rest_framework.views import APIView from core.lib.threshold import annotate_online, get_chans, get_users logger = logging.getLogger(__name__) class ThresholdChans(LoginRequiredMixin, APIView): parser_classes = [FormParser] plan_name = "drilldown" 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 "query" not in request.data: return JsonResponse({"success": False}) net = request.data["net"] query = request.data["query"] channels = get_chans(net, [query]) if not channels: return HttpResponse("") channels_human = ", ".join(channels) return HttpResponse(channels_human) class ThresholdUsers(LoginRequiredMixin, APIView): parser_classes = [FormParser] plan_name = "drilldown" 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 "query" not in request.data: return JsonResponse({"success": False}) net = request.data["net"] query = request.data["query"] users = get_users(net, [query]) if not users: return HttpResponse("") users_human = ", ".join(users) return HttpResponse(users_human) class ThresholdOnline(LoginRequiredMixin, APIView): parser_classes = [FormParser] plan_name = "drilldown" 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 "query" not in request.data: return JsonResponse({"success": False}) net = request.data["net"] query = request.data["query"] online_info = annotate_online(net, query) return JsonResponse(online_info)