Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
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'}
Exemplo n.º 4
0
    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)
Exemplo n.º 5
0
    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)
Exemplo n.º 6
0
    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)