Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    def test_get_paginator_default(self):
        """Test that the standard report paginator is returned."""
        params = {}
        paginator = get_paginator(params, 0)

        self.assertIsInstance(paginator, ReportPagination)