Example #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)
 def test_get_groupby_default(self):
     """Test that get_group_by() returns the provided default value."""
     fake_request = Mock(
         spec=HttpRequest,
         user=Mock(access=None,
                   customer=Mock(schema_name=self.FAKE.word())),
         GET=Mock(urlencode=Mock(return_value=self.fake_uri)))
     fake_view = Mock(spec=ReportView,
                      provider=self.FAKE.word(),
                      query_handler=Mock(provider=self.provider),
                      report=self.FAKE.word(),
                      serializer=Mock,
                      tag_handler=[])
     params = QueryParameters(fake_request, fake_view)
     self.assertIsInstance(params.get('group_by'), dict)
 def test_get_set(self):
     """Test that set() assigns the provided value and get() retrieves it."""
     fake_request = Mock(
         spec=HttpRequest,
         user=Mock(access=None,
                   customer=Mock(schema_name=self.FAKE.word())),
         GET=Mock(urlencode=Mock(return_value=self.fake_uri)))
     fake_view = Mock(spec=ReportView,
                      provider=self.FAKE.word(),
                      query_handler=Mock(provider=self.provider),
                      report=self.FAKE.word(),
                      serializer=Mock,
                      tag_handler=[])
     params = QueryParameters(fake_request, fake_view)
     key = self.FAKE.word()
     value = self.FAKE.word()
     params.set(key, value)
     self.assertEqual(params.get(key), value)