def get(self, request, pk): """ get: Task by ID Retrieve a specific task by ID. """ task = Task.prepared.get(id=pk) context = { 'proxy': bool_from_request(request.GET, 'proxy', True), 'resolve_uri': True, 'completed_by': 'full', 'request': request } # get prediction if task.project.evaluate_predictions_automatically and not task.predictions.exists( ): evaluate_predictions([task]) serializer = self.get_serializer_class()(task, many=False, context=context) data = serializer.data return Response(data)
def tasks(self, request, pk=None): """ get: Get task list for view Retrieve a list of tasks with pagination for a specific view using filters and ordering. """ view = self.get_object() queryset = self.get_task_queryset(request, view) context = {'proxy': bool_from_request(request.GET, 'proxy', True), 'resolve_uri': True, 'request': request} project = view.project # paginated tasks self.pagination_class = TaskPagination page = self.paginate_queryset(queryset) if page is not None: # retrieve ML predictions if tasks don't have them if project.evaluate_predictions_automatically: ids = [task.id for task in page] # page is a list already tasks_for_predictions = Task.objects.filter(id__in=ids, predictions__isnull=True) evaluate_predictions(tasks_for_predictions) serializer = self.task_serializer_class(page, many=True, context=context) return self.get_paginated_response(serializer.data) # all tasks if project.evaluate_predictions_automatically: evaluate_predictions(queryset.filter(predictions__isnull=True)) serializer = self.task_serializer_class(queryset, many=True, context=context) return Response(serializer.data)
def retrieve_tasks_predictions(project, queryset, **kwargs): """ Retrieve predictions by tasks ids :param project: project instance :param queryset: filtered tasks db queryset """ evaluate_predictions(queryset) return {'processed_items': queryset.count(), 'detail': 'Retrieved ' + str(queryset.count()) + ' predictions'}
def get(self, request, pk): self.task = self.get_object() context = self.get_retrieve_serializer_context(request) context['project'] = project = self.task.project # get prediction if (project.evaluate_predictions_automatically or project.show_collab_predictions) \ and not self.task.predictions.exists(): evaluate_predictions([self.task]) serializer = self.get_serializer_class()(self.task, many=False, context=context) data = serializer.data return Response(data)
def get(self, request, pk): """ get: Task by ID Retrieve a specific task by ID. """ task = Task.prepared.get_queryset(fields_for_evaluation='all').get( id=pk) context = self.get_serializer_context(request) context['project'] = project = task.project # get prediction if project.evaluate_predictions_automatically and not task.predictions.exists( ): evaluate_predictions([task]) serializer = self.get_serializer_class()(task, many=False, context=context) data = serializer.data return Response(data)
def get(self, request): """ get: Get task list for view Retrieve a list of tasks with pagination for a specific view using filters and ordering. """ # get project view_pk = int_from_request(request.GET, 'view', 0) or int_from_request( request.data, 'view', 0) project_pk = int_from_request(request.GET, 'project', 0) or int_from_request( request.data, 'project', 0) if project_pk: project = get_object_with_check_and_log(request, Project, pk=project_pk) self.check_object_permissions(request, project) elif view_pk: view = get_object_with_check_and_log(request, View, pk=view_pk) project = view.project self.check_object_permissions(request, project) else: return Response( {'detail': 'Neither project nor view id specified'}, status=404) # get prepare params (from view or from payload directly) prepare_params = get_prepare_params(request, project) queryset = self.get_task_queryset(request, prepare_params) context = self.get_task_serializer_context(self.request, project) # paginated tasks self.pagination_class = TaskPagination page = self.paginate_queryset(queryset) all_fields = 'all' if request.GET.get('fields', None) == 'all' else None fields_for_evaluation = get_fields_for_evaluation( prepare_params, request.user) if page is not None: ids = [task.id for task in page] # page is a list already tasks = list( Task.prepared.annotate_queryset( Task.objects.filter(id__in=ids), fields_for_evaluation=fields_for_evaluation, all_fields=all_fields, )) tasks_by_ids = {task.id: task for task in tasks} # keep ids ordering page = [tasks_by_ids[_id] for _id in ids] # retrieve ML predictions if tasks don't have them if project.evaluate_predictions_automatically: tasks_for_predictions = Task.objects.filter( id__in=ids, predictions__isnull=True) evaluate_predictions(tasks_for_predictions) serializer = self.task_serializer_class(page, many=True, context=context) return self.get_paginated_response(serializer.data) # all tasks if project.evaluate_predictions_automatically: evaluate_predictions(queryset.filter(predictions__isnull=True)) queryset = Task.prepared.annotate_queryset( queryset, fields_for_evaluation=fields_for_evaluation, all_fields=all_fields) serializer = self.task_serializer_class(queryset, many=True, context=context) return Response(serializer.data)