def get(self, request, **kwargs): """Get Report Data. This method is responsible for passing request data to the reporting APIs. Args: request (Request): The HTTP request object Returns: (Response): The report in a Response object """ LOG.debug(f"API: {request.path} USER: {request.user.username}") key = kwargs.get("key") if key and not self.validate_key(key): raise Http404 try: params = QueryParameters(request=request, caller=self, **kwargs) except ValidationError as exc: return Response(data=exc.detail, status=status.HTTP_400_BAD_REQUEST) if key and params.get("key_only"): LOG.debug("Invalid query parameter 'key_only'.") error = {"details": "Invalid query parameter 'key_only'."} raise ValidationError(error) if not key and params.get_filter("value"): LOG.debug("Invalid query parameter 'value'.") error = {"details": "Invalid query parameter 'value'."} raise ValidationError(error) handler = self.query_handler(params) output = handler.execute_query() if key: lizt = [] for dikt in output.get("data"): if isinstance(dikt.get("values"), list): for val in dikt.get("values"): lizt.append(val) else: lizt.append(dikt.get("values")) output["data"] = lizt max_rank = handler.max_rank paginator = get_paginator(params.parameters.get("filter", {}), max_rank) paginated_result = paginator.paginate_queryset(output, request) LOG.debug(f"DATA: {output}") return paginator.get_paginated_response(paginated_result)
def test_get_paginator_for_filter_offset(self): """Test that the standard report paginator is returned.""" params = {'offset': 5} paginator = get_paginator(params, 0) self.assertIsInstance(paginator, ReportRankedPagination)
def test_get_paginator_default(self): """Test that the standard report paginator is returned.""" params = {} paginator = get_paginator(params, 0) self.assertIsInstance(paginator, ReportPagination)