def inspection(self, request, pk=None): """Get the inspection results of a scan job.""" ordering_filter, status_filter, source_id_filter = \ self.handle_result_filters(request) try: scan_job = get_object_or_404(self.queryset, pk=pk) all_tasks = scan_job.inspection_results.task_results.all() except ValueError: return Response(status=400) system_result_queryset = None for task_result in all_tasks: if system_result_queryset is None: system_result_queryset = task_result.systems.all() else: system_result_queryset = \ system_result_queryset | task_result.systems.all() # create ordered queryset and assign the paginator paginator = StandardResultsSetPagination() ordered_query_set = system_result_queryset.order_by(ordering_filter) if status_filter: ordered_query_set = ordered_query_set.filter(status=status_filter) if source_id_filter: ordered_query_set = \ ordered_query_set.filter(source__id=source_id_filter) page = paginator.paginate_queryset(ordered_query_set, request) if page is not None: serializer = SystemInspectionResultSerializer(page, many=True) for system in serializer.data: expand_system_inspection(system) return paginator.get_paginated_response(serializer.data) return Response(status=404)
def test_get_previous_link_value(self, mock_super): """Test the get previous link method when super returns a value.""" expected = 'http://localhost:8000/api/v1/providers/?offset=20' mock_super.return_value = expected paginator = StandardResultsSetPagination() paginator.request = Mock paginator.request.META = {} link = paginator.get_previous_link() self.assertEqual(link, expected)
def test_link_no_rewrite(self): """Test the no link rewrite.""" request = Mock() request.META = {} link = 'http://localhost:8000/api/v1/providers/?offset=20' result = StandardResultsSetPagination.link_rewrite(request, link) self.assertEqual(link, result)
def test_link_rewrite_err(self): """Test the link rewrite.""" request = Mock() request.META = {PATH_INFO: 'https://localhost:8000/providers/'} link = 'http://localhost:8000/providers/?offset=20' result = StandardResultsSetPagination.link_rewrite(request, link) self.assertEqual(link, result)
def test_link_rewrite(self): """Test the link rewrite.""" request = Mock() request.META = {PATH_INFO: '/api/v1/providers/'} link = 'http://localhost:8000/api/v1/providers/?page=2' expected = '/api/v1/providers/?page=2' result = StandardResultsSetPagination.link_rewrite(request, link) self.assertEqual(expected, result)
def test_link_rewrite(self): """Test the link rewrite.""" request = Mock() request.META = {PATH_INFO: "/v1/providers/"} link = "http://localhost:8000/v1/providers/?offset=20" expected = "/v1/providers/?offset=20" result = StandardResultsSetPagination.link_rewrite(request, link) self.assertEqual(expected, result)
def jobs(request, pk=None): """Get the jobs of a scan.""" # pylint: disable=invalid-name if pk is not None: if not is_int(pk): return Response(status=status.HTTP_404_NOT_FOUND) result = [] scan = get_object_or_404(Scan.objects.all(), pk=pk) if request.method == 'GET': job_queryset = get_job_queryset_query_set(scan, request.query_params) paginator = StandardResultsSetPagination() page = paginator.paginate_queryset(job_queryset, request) if page is not None: serializer = ScanJobSerializer(page, many=True) for scan in serializer.data: json_scan = expand_scanjob(scan) result.append(json_scan) return paginator.get_paginated_response(serializer.data) for job in job_queryset: job_serializer = ScanJobSerializer(job) job_json = job_serializer.data job_json = expand_scanjob(job_serializer.data) result.append(job_json) return Response(result) else: job_data = {} job_data['scan'] = pk job_serializer = ScanJobSerializer(data=job_data) job_serializer.is_valid(raise_exception=True) job_serializer.save() scanjob_obj = ScanJob.objects.get(pk=job_serializer.data['id']) scanjob_obj.log_current_status() start_scan.send(sender=ScanViewSet.__class__, instance=scanjob_obj) return Response(job_serializer.data, status=status.HTTP_201_CREATED)
def get_paginator(request, count): """Get Paginator.""" paginator = StandardResultsSetPagination() paginator.count = count paginator.request = request paginator.limit = _get_int_query_param(request, "limit", 10) paginator.offset = _get_int_query_param(request, "offset", 0) return paginator
def test_get_previous_link_none(self, mock_super): """Test the get previous link method when super returns none.""" paginator = StandardResultsSetPagination() link = paginator.get_previous_link() self.assertIsNone(link)