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)