Exemple #1
0
    def test_get_protected_by_status_all_failed(self):
        tasks = [
            LabelingTask(status=LabelingTaskStatus.FAILED),
            LabelingTask(status=LabelingTaskStatus.FAILED),
        ]

        self.assertListEqual(LabelingTaskAdmin.get_protected_by_status(tasks),
                             [])
Exemple #2
0
    def test_get_protected_by_status_if_no_valid(self):
        tasks = [
            LabelingTask(status=LabelingTaskStatus.FAILED),
            LabelingTask(status=LabelingTaskStatus.ARCHIVED),
        ]

        self.assertListEqual(LabelingTaskAdmin.get_protected_by_status(tasks),
                             [])
Exemple #3
0
    def test_get_protected_by_status_when_all_are_archived(self):
        tasks = [
            LabelingTask(status=LabelingTaskStatus.ARCHIVED),
            LabelingTask(status=LabelingTaskStatus.ARCHIVED),
        ]

        self.assertListEqual(LabelingTaskAdmin.get_protected_by_status(tasks),
                             [])
  def archive(self, request: Request) -> Response:
    """Change status of specified tasks and delete them in CVAT.

    Tasks that have been archived will be skipped as well as task IDs that
    are not exist.

    Request::
      {"id": [task_id]}

    Response::
      {
        "archived": [task_id],
        "errors": [
          {
            "id": task_id,
            "error": string
          }
        ]
      }
    """
    ids_serializer = LabelingTaskIDSerializer(data=request.data)
    ids_serializer.is_valid(raise_exception=True)

    labeling_tasks = LabelingTask.fetch_for_archiving(
      pk__in=ids_serializer.data['id'],
    )

    cvat_service = CvatService()
    deleted = []
    errors = []

    for lt in labeling_tasks:
      try:
        cvat_service.delete_task(lt.task_id)
      except CVATServiceException as err:
        if lt.status == LabelingTaskStatus.SAVED:
          deleted.append(lt)
        logger.error(
          'Unable to delete cvat task %d. Reason: %s', lt.task_id, err,
        )
        errors.append({'id': lt.id, 'error': str(err)})
      else:
        deleted.append(lt)

    LabelingTask.update_statuses(deleted, LabelingTaskStatus.ARCHIVED)

    return Response(
      data={
        'archived': [each.id for each in deleted],
        'errors': errors,
      },
      status=status.HTTP_200_OK,
    )
Exemple #5
0
    def test_get_protected_by_status_if_valid(self):
        tasks = [
            LabelingTask(task_id=123, status=LabelingTaskStatus.FAILED),
            LabelingTask(task_id=456, status=LabelingTaskStatus.VALIDATION),
            LabelingTask(task_id=789, status=LabelingTaskStatus.ANNOTATION),
        ]
        expected_protected_task_ids = (456, 789)

        actual_protected = LabelingTaskAdmin.get_protected_by_status(tasks)

        self.assertEqual(len(actual_protected), 2)
        for index, task_id in enumerate(map(str, expected_protected_task_ids)):
            self.assertIn(task_id, actual_protected[index])
Exemple #6
0
    def test_get_protected_by_status_when_some_tasks_are_not_archived(self):
        tasks = [
            LabelingTask(task_id=123, status=LabelingTaskStatus.ARCHIVED),
            LabelingTask(task_id=456, status=LabelingTaskStatus.VALIDATION),
            LabelingTask(task_id=789, status=LabelingTaskStatus.ANNOTATION),
        ]

        actual_protected = LabelingTaskAdmin.get_protected_by_status(tasks)
        expected_protected_task_ids = (456, 789)

        self.assertEqual(len(actual_protected), 2)
        for index, task_id in enumerate(map(str, expected_protected_task_ids)):
            self.assertIn(task_id, actual_protected[index])
    def test_update_statuses(self):
        tasks = [
            self.test_factory.create_labeling_task(
                status=LabelingTaskStatus.ANNOTATION),
            self.test_factory.create_labeling_task(
                status=LabelingTaskStatus.COMPLETED),
        ]

        LabelingTask.update_statuses(tasks, LabelingTaskStatus.ARCHIVED)

        for got in LabelingTask.objects.filter(pk__in=[t.id
                                                       for t in tasks]).all():
            self.assertEqual(got.status, LabelingTaskStatus.ARCHIVED)
    def test_fetch_for_archiving_excludes_archived(self):
        annotated = self.test_factory.create_labeling_task(
            status=LabelingTaskStatus.ANNOTATION)
        completed = self.test_factory.create_labeling_task(
            status=LabelingTaskStatus.COMPLETED)
        archived = self.test_factory.create_labeling_task(
            status=LabelingTaskStatus.ARCHIVED)

        tasks = LabelingTask.fetch_for_archiving(
            pk__in=[annotated.id, completed.id, archived.id])

        self.assertSetEqual(
            {t.id
             for t in tasks},
            {annotated.id, completed.id},
        )