def test_direct_s3_upload_folder():
    projects_found = sa.search_projects(TEST_PROJECT_NAME2,
                                        return_metadata=True)
    for pr in projects_found:
        sa.delete_project(pr)

    project = sa.create_project(TEST_PROJECT_NAME2, "a", "Vector")
    print(project["id"])

    csv = (Path.home() / ".aws" / "credentials").read_text().splitlines()

    access_key_id = csv[1].split(" = ")[1]
    access_secret = csv[2].split(" = ")[1]

    sa.create_folder(project, "folder1")
    project_folder = project["name"] + "/folder1"
    sa.upload_images_from_s3_bucket_to_project(project_folder, access_key_id,
                                               access_secret, S3_BUCKET,
                                               S3_FOLDER)
    s3_client = boto3.client('s3')
    paginator = s3_client.get_paginator('list_objects_v2')
    response_iterator = paginator.paginate(Bucket=S3_BUCKET, Prefix=S3_FOLDER)
    on_s3 = []
    for response in response_iterator:
        if 'Contents' in response:
            for object_data in response['Contents']:
                key = object_data['Key']
                if key[-4:] in [".jpg", ".png"]:
                    on_s3.append(key)

    assert len(on_s3) == len(sa.search_images(project_folder))
def test_preannotation_folder_upload_download_cli_pixel_object_COCO_folder(
        tmpdir):
    project_type = "Pixel"
    name = "Example Project folder test pixel1 preannotation cli upload coco object pixel"
    description = "test"
    from_folder = "./tests/converter_test/COCO/input/toSuperAnnotate/panoptic_segmentation"
    task = "panoptic_segmentation"
    dataset_name = "panoptic_test"

    projects_found = sa.search_projects(name, return_metadata=True)
    for pr in projects_found:
        sa.delete_project(pr)

    project = sa.create_project(name, description, project_type)
    sa.create_folder(project, "folder1")
    project_with_folder = project["name"] + "/folder1"
    sa.upload_images_from_folder_to_project(project_with_folder,
                                            from_folder,
                                            annotation_status="InProgress")
    subprocess.run(
        f'superannotatecli upload-preannotations --project "{project_with_folder}" --folder "{from_folder}" --format COCO --task {task} --dataset-name {dataset_name}',
        check=True,
        shell=True)
    time.sleep(5)
    count_in = 3

    images = sa.search_images(project_with_folder)
    for image_name in images:
        sa.download_image_preannotations(project_with_folder, image_name,
                                         tmpdir)

    count_out = len(list(Path(tmpdir).glob("*.json")))

    assert count_in == count_out
Ejemplo n.º 3
0
def test_project_folder_image_count(tmpdir):
    PROJECT_NAME = "test folder image count"
    tmpdir = Path(tmpdir)

    projects_found = sa.search_projects(PROJECT_NAME, return_metadata=True)
    for pr in projects_found:
        sa.delete_project(pr)

    project = sa.create_project(PROJECT_NAME, 'test', 'Vector')
    project = project["name"]
    sa.upload_images_from_folder_to_project(project,
                                            FROM_FOLDER,
                                            annotation_status="InProgress")
    num_images = sa.get_project_image_count(project)
    assert num_images == 4

    sa.create_folder(project, "folder1")

    sa.upload_images_from_folder_to_project(project + "/folder1",
                                            FROM_FOLDER,
                                            annotation_status="InProgress")
    num_images = sa.get_project_image_count(project)
    assert num_images == 4

    num_images = sa.get_project_image_count(project + "/folder1")
    assert num_images == 4

    num_images = sa.get_project_image_count(project, with_all_subfolders=True)
    assert num_images == 8
Ejemplo n.º 4
0
def test_copy_images3(tmpdir):
    PROJECT_NAME = "test copy3 folder images"
    tmpdir = Path(tmpdir)

    projects_found = sa.search_projects(PROJECT_NAME, return_metadata=True)
    for pr in projects_found:
        sa.delete_project(pr)

    project = sa.create_project(PROJECT_NAME, 'test', 'Vector')
    sa.upload_images_from_folder_to_project(project,
                                            FROM_FOLDER,
                                            annotation_status="InProgress")
    sa.create_folder(project, "folder1")
    project = PROJECT_NAME + "/folder1"

    sa.copy_images(PROJECT_NAME,
                   ["example_image_2.jpg", "example_image_3.jpg"],
                   project,
                   include_annotations=False,
                   copy_annotation_status=False,
                   copy_pin=False)

    num_images = sa.get_project_image_count(project)
    assert num_images == 2

    num_images = sa.get_project_image_count(PROJECT_NAME)
    assert num_images == 4
Ejemplo n.º 5
0
def test_delete_folders(tmpdir):
    PROJECT_NAME = "test folder deletes"

    tmpdir = Path(tmpdir)

    projects_found = sa.search_projects(PROJECT_NAME, return_metadata=True)
    for pr in projects_found:
        sa.delete_project(pr)

    project = sa.create_project(PROJECT_NAME, 'test', 'Vector')
    sa.create_folder(project, "folder1")
    sa.create_folder(project, "folder2")
    sa.create_folder(project, "folder3")

    assert len(sa.search_folders(project)) == 3

    sa.delete_folders(project, ["folder1"])
    assert len(sa.search_folders(project)) == 2
    sa.delete_folders(project, ["folder2", "folder3"])
    assert len(sa.search_folders(project)) == 0

    sa.create_folder(project, "folder5")
    sa.create_folder(project, "folder6")
    assert len(sa.search_folders(project)) == 2

    sa.delete_folders(project, ["folder2", "folder5"])
    assert len(sa.search_folders(project)) == 1
    assert sa.search_folders(project)[0] == "folder6"
Ejemplo n.º 6
0
def test_move_images2(tmpdir):
    PROJECT_NAME = "test move folder images2"
    tmpdir = Path(tmpdir)

    projects_found = sa.search_projects(PROJECT_NAME, return_metadata=True)
    for pr in projects_found:
        sa.delete_project(pr)

    project = sa.create_project(PROJECT_NAME, 'test', 'Vector')
    sa.create_folder(project, "folder1")
    project = PROJECT_NAME + "/folder1"
    sa.upload_images_from_folder_to_project(project,
                                            FROM_FOLDER,
                                            annotation_status="InProgress")
    num_images = sa.get_project_image_count(project)
    assert num_images == 4

    sa.create_folder(PROJECT_NAME, "folder2")
    project2 = PROJECT_NAME + "/folder2"
    num_images = sa.get_project_image_count(project2)
    assert num_images == 0

    sa.move_images(project, None, project2)

    num_images = sa.get_project_image_count(project2)
    assert num_images == 4

    num_images = sa.get_project_image_count(project)
    assert num_images == 0
Ejemplo n.º 7
0
def test_delete_images(tmpdir):
    PROJECT_NAME = "test delete folder images"
    tmpdir = Path(tmpdir)

    projects_found = sa.search_projects(PROJECT_NAME, return_metadata=True)
    for pr in projects_found:
        sa.delete_project(pr)

    project = sa.create_project(PROJECT_NAME, 'test', 'Vector')
    sa.create_folder(project, "folder1")
    project = project["name"] + "/folder1"
    sa.upload_images_from_folder_to_project(project,
                                            FROM_FOLDER,
                                            annotation_status="InProgress")
    num_images = sa.get_project_image_count(project)
    assert num_images == 4

    sa.delete_images(project, ["example_image_2.jpg", "example_image_3.jpg"])

    num_images = sa.get_project_image_count(project)
    assert num_images == 2

    sa.delete_images(project, None)
    num_images = sa.get_project_image_count(project)
    assert num_images == 0
def test_consensus():
    annot_types = ['polygon', 'bbox', 'point']
    folder_names = ['consensus_1', 'consensus_2', 'consensus_3']
    df_column_names = [
        'creatorEmail', 'imageName', 'instanceId', 'area', 'className',
        'attributes', 'folderName', 'score'
    ]
    export_path = test_root / 'consensus_benchmark' / 'consensus_test_data'
    if len(sa.search_projects(project_name)) != 0:
        sa.delete_project(project_name)

    sa.create_project(project_name, "test bench", "Vector")
    for i in range(1, 4):
        sa.create_folder(project_name, "consensus_" + str(i))
    sa.create_annotation_classes_from_classes_json(
        project_name, export_path / 'classes' / 'classes.json')
    sa.upload_images_from_folder_to_project(project_name,
                                            export_path / "images",
                                            annotation_status="Completed")
    for i in range(1, 4):
        sa.upload_images_from_folder_to_project(project_name + '/consensus_' +
                                                str(i),
                                                export_path / "images",
                                                annotation_status="Completed")
    sa.upload_annotations_from_folder_to_project(project_name, export_path)
    for i in range(1, 4):
        sa.upload_annotations_from_folder_to_project(
            project_name + '/consensus_' + str(i),
            export_path / ('consensus_' + str(i)))

    for annot_type in annot_types:
        res_df = sa.consensus(project_name,
                              folder_names,
                              annot_type=annot_type)
        #test content of projectName column
        assert sorted(res_df['folderName'].unique()) == folder_names

        #test structure of resulting DataFrame
        assert sorted(res_df.columns) == sorted(df_column_names)

        #test lower bound of the score
        assert (res_df['score'] >= 0).all()

        #test upper bound of the score
        assert (res_df['score'] <= 1).all()

    image_names = [
        'bonn_000000_000019_leftImg8bit.png',
        'bielefeld_000000_000321_leftImg8bit.png'
    ]

    #test filtering images with given image names list
    res_images = sa.consensus(project_name,
                              folder_names,
                              export_root=export_path,
                              image_list=image_names)

    assert sorted(res_images['imageName'].unique()) == sorted(image_names)
Ejemplo n.º 9
0
def create_folder(command_name, args):
    parser = argparse.ArgumentParser(prog=_CLI_COMMAND + " " + command_name)
    parser.add_argument('--project',
                        required=True,
                        help='Project in which to create folder')
    parser.add_argument('--name', required=True, help='Folder name to create')
    args = parser.parse_args(args)

    sa.create_folder(args.project, args.name)
Ejemplo n.º 10
0
def test_copy_images(tmpdir):
    PROJECT_NAME = "test copy folder images"
    tmpdir = Path(tmpdir)

    projects_found = sa.search_projects(PROJECT_NAME, return_metadata=True)
    for pr in projects_found:
        sa.delete_project(pr)

    project = sa.create_project(PROJECT_NAME, 'test', 'Vector')
    sa.create_folder(project, "folder1")
    project = PROJECT_NAME + "/folder1"
    sa.upload_images_from_folder_to_project(project,
                                            FROM_FOLDER,
                                            annotation_status="InProgress")
    num_images = sa.get_project_image_count(project)
    assert num_images == 4

    im1 = sa.get_image_metadata(project, "example_image_2.jpg")
    assert im1["annotation_status"] == "InProgress"

    sa.create_folder(PROJECT_NAME, "folder2")
    project2 = PROJECT_NAME + "/folder2"
    num_images = sa.get_project_image_count(project2)
    assert num_images == 0

    sa.copy_images(project, ["example_image_2.jpg", "example_image_3.jpg"],
                   project2,
                   include_annotations=False,
                   copy_annotation_status=False,
                   copy_pin=False)

    im1_copied = sa.get_image_metadata(project2, "example_image_2.jpg")
    assert im1_copied["annotation_status"] == "NotStarted"

    ann2 = sa.get_image_annotations(project2, "example_image_2.jpg")

    assert len(ann2["annotation_json"]["instances"]) == 0

    num_images = sa.get_project_image_count(project2)
    assert num_images == 2

    res = sa.copy_images(project, None, project2)

    num_images = sa.get_project_image_count(project2)
    assert num_images == 4

    assert res == 2

    sa.copy_images(project, ["example_image_2.jpg", "example_image_3.jpg"],
                   PROJECT_NAME,
                   include_annotations=False,
                   copy_annotation_status=False,
                   copy_pin=False)
    num_images = sa.get_project_image_count(PROJECT_NAME)
    assert num_images == 2
Ejemplo n.º 11
0
def test_folder_export(tmpdir):
    PROJECT_NAME = "test folder export"
    tmpdir = Path(tmpdir)

    projects_found = sa.search_projects(PROJECT_NAME, return_metadata=True)
    for pr in projects_found:
        sa.delete_project(pr)

    project = sa.create_project(PROJECT_NAME, 'test', 'Vector')
    sa.create_annotation_classes_from_classes_json(
        project, FROM_FOLDER / "classes" / "classes.json")
    sa.upload_images_from_folder_to_project(project,
                                            FROM_FOLDER,
                                            annotation_status="InProgress")
    sa.create_folder(project, "folder1")
    project = PROJECT_NAME + "/folder1"
    sa.upload_images_from_folder_to_project(project,
                                            FROM_FOLDER,
                                            annotation_status="InProgress")

    sa.upload_annotations_from_folder_to_project(project, FROM_FOLDER)
    num_images = sa.get_project_image_count(project)
    assert num_images == 4

    sa.create_folder(PROJECT_NAME, "folder2")
    project2 = PROJECT_NAME + "/folder2"
    num_images = sa.get_project_image_count(project2)
    assert num_images == 0

    sa.copy_images(project, ["example_image_2.jpg", "example_image_3.jpg"],
                   project2)

    export = sa.prepare_export(PROJECT_NAME, ["folder1", "folder2"])
    sa.download_export(project, export, tmpdir)

    assert len(list((tmpdir / "classes").rglob("*"))) == 1

    assert len(list((tmpdir / "folder1").rglob("*"))) == 4

    assert len(list((tmpdir / "folder2").rglob("*"))) == 2

    assert len(list((tmpdir).glob("*.*"))) == 0

    export = sa.prepare_export(PROJECT_NAME)
    sa.download_export(project, export, tmpdir)

    assert len(list((tmpdir / "classes").rglob("*"))) == 1

    assert len(list((tmpdir / "folder1").rglob("*"))) == 4

    assert len(list((tmpdir / "folder2").rglob("*"))) == 2

    assert len(list((tmpdir).glob("*.*"))) == 4
Ejemplo n.º 12
0
def test_assign_images_folder(tmpdir):
    tmpdir = Path(tmpdir)

    projects = sa.search_projects(PROJECT_NAME_VECTOR2, return_metadata=True)
    for project in projects:
        sa.delete_project(project)

    project = sa.create_project(PROJECT_NAME_VECTOR2, "test", "Vector")
    email = sa.get_team_metadata()["users"][0]["email"]
    sa.share_project(project, email, "QA")
    sa.create_folder(project, FOLDER2)

    project_folder = project["name"] + "/" + FOLDER2

    sa.upload_images_from_folder_to_project(project_folder,
                                            "./tests/sample_project_vector")

    sa.assign_images(project_folder,
                     ["example_image_1.jpg", "example_image_2.jpg"], email)

    time.sleep(1)
    im1_metadata = sa.get_image_metadata(project_folder, "example_image_1.jpg")
    im2_metadata = sa.get_image_metadata(project_folder, "example_image_2.jpg")

    assert im1_metadata["qa_id"] == email
    assert im2_metadata["qa_id"] == email

    sa.unshare_project(project, email)

    time.sleep(1)

    im1_metadata = sa.get_image_metadata(project_folder, "example_image_1.jpg")
    im2_metadata = sa.get_image_metadata(project_folder, "example_image_2.jpg")

    assert im1_metadata["qa_id"] is None
    assert im2_metadata["qa_id"] is None
    assert im1_metadata["annotator_id"] is None
    assert im2_metadata["annotator_id"] is None

    sa.share_project(project, email, "Annotator")

    sa.assign_images(project_folder,
                     ["example_image_1.jpg", "example_image_2.jpg"], email)

    time.sleep(1)
    im1_metadata = sa.get_image_metadata(project_folder, "example_image_1.jpg")
    im2_metadata = sa.get_image_metadata(project_folder, "example_image_2.jpg")

    assert im1_metadata["annotator_id"] == email
    assert im2_metadata["annotator_id"] == email
    assert im1_metadata["qa_id"] is None
    assert im2_metadata["qa_id"] is None
Ejemplo n.º 13
0
def test_copy_images2(tmpdir):
    PROJECT_NAME = "test copy folder annotation images"
    tmpdir = Path(tmpdir)

    projects_found = sa.search_projects(PROJECT_NAME, return_metadata=True)
    for pr in projects_found:
        sa.delete_project(pr)

    project = sa.create_project(PROJECT_NAME, 'test', 'Vector')
    sa.create_annotation_classes_from_classes_json(
        project, FROM_FOLDER / "classes" / "classes.json")
    sa.create_folder(project, "folder1")
    project = PROJECT_NAME + "/folder1"
    sa.upload_images_from_folder_to_project(project,
                                            FROM_FOLDER,
                                            annotation_status="InProgress")

    sa.upload_annotations_from_folder_to_project(project, FROM_FOLDER)
    num_images = sa.get_project_image_count(project)
    assert num_images == 4

    sa.create_folder(PROJECT_NAME, "folder2")
    project2 = PROJECT_NAME + "/folder2"
    num_images = sa.get_project_image_count(project2)
    assert num_images == 0

    sa.pin_image(project, "example_image_2.jpg")

    im1 = sa.get_image_metadata(project, "example_image_2.jpg")
    assert im1["is_pinned"] == 1
    assert im1["annotation_status"] == "InProgress"

    sa.copy_images(project, ["example_image_2.jpg", "example_image_3.jpg"],
                   project2)

    num_images = sa.get_project_image_count(project2)
    assert num_images == 2

    ann1 = sa.get_image_annotations(project, "example_image_2.jpg")
    ann2 = sa.get_image_annotations(project2, "example_image_2.jpg")
    assert ann1 == ann2

    im1_copied = sa.get_image_metadata(project2, "example_image_2.jpg")
    assert im1_copied["is_pinned"] == 1
    assert im1_copied["annotation_status"] == "InProgress"

    im2_copied = sa.get_image_metadata(project2, "example_image_3.jpg")
    assert im2_copied["is_pinned"] == 0
    assert im2_copied["annotation_status"] == "InProgress"
Ejemplo n.º 14
0
def test_folder_annotations(tmpdir):
    PROJECT_NAME = "test folder annotations"
    tmpdir = Path(tmpdir)

    projects_found = sa.search_projects(PROJECT_NAME, return_metadata=True)
    for pr in projects_found:
        sa.delete_project(pr)

    project = sa.create_project(PROJECT_NAME, 'test', 'Vector')
    project = project["name"]
    sa.upload_images_from_folder_to_project(project,
                                            FROM_FOLDER,
                                            annotation_status="InProgress")
    sa.create_annotation_classes_from_classes_json(
        project, FROM_FOLDER / "classes" / "classes.json")
    folder_metadata = sa.create_folder(project, "folder1")
    assert folder_metadata["name"] == "folder1"

    folders = sa.search_folders(project, return_metadata=True)
    assert len(folders) == 1

    sa.upload_images_from_folder_to_project(project + "/" + folders[0]["name"],
                                            FROM_FOLDER,
                                            annotation_status="InProgress")
    sa.upload_annotations_from_folder_to_project(
        project + "/" + folders[0]["name"], FROM_FOLDER)
    annot = sa.get_image_annotations(project, "example_image_1.jpg")
    assert len(annot["annotation_json"]["instances"]) == 0

    annot = sa.get_image_annotations(project + "/folder1",
                                     "example_image_1.jpg")
    assert len(annot["annotation_json"]["instances"]) > 0
Ejemplo n.º 15
0
def test_video(tmpdir):
    tmpdir = Path(tmpdir)

    projects = sa.search_projects(PROJECT_NAME1, return_metadata=True)
    for project in projects:
        sa.delete_project(project)

    project = sa.create_project(PROJECT_NAME1, "test", "Vector")
    time.sleep(1)
    sa.create_annotation_class(project, "fr", "#FFAAAA")
    time.sleep(1)
    sa.create_annotation_class(project, "fr2", "#FFAACC")

    sa.upload_videos_from_folder_to_project(
        project, "./tests/sample_videos", target_fps=2
    )

    projects = sa.search_projects(PROJECT_NAME2, return_metadata=True)
    for project in projects:
        sa.delete_project(project)

    project = sa.create_project(PROJECT_NAME2, "test", "Vector")

    subprocess.run(
        f'superannotatecli upload-videos --project "{PROJECT_NAME2}" --folder ./tests/sample_videos --target-fps 2',
        check=True,
        shell=True
    )
    time.sleep(5)
    sa.create_annotation_class(project, "fr2", "#FFAACC")

    assert len(sa.search_images(PROJECT_NAME1)) == len(
        sa.search_images(PROJECT_NAME2)
    )

    sa.create_folder(project, "new folder")

    sa.upload_videos_from_folder_to_project(
        PROJECT_NAME2 + "/new folder", "./tests/sample_videos", target_fps=2
    )

    assert len(sa.search_images(PROJECT_NAME2 + "/new folder")) == len(
        sa.search_images(PROJECT_NAME2)
    )
def test_pin_image_in_folder(tmpdir):
    tmpdir = Path(tmpdir)

    projects = sa.search_projects(PROJECT_NAME2, return_metadata=True)
    for project in projects:
        sa.delete_project(project)

    project = sa.create_project(PROJECT_NAME2, "test", "Vector")
    sa.create_folder(project, FOLDER2)

    project_folder = project["name"] + "/" + FOLDER2
    sa.upload_images_from_folder_to_project(project_folder,
                                            "./tests/sample_project_vector",
                                            annotation_status="QualityCheck")

    img_metadata0 = sa.get_image_metadata(project_folder,
                                          "example_image_1.jpg")
    assert img_metadata0["is_pinned"] == 0

    sa.pin_image(project_folder, "example_image_1.jpg")
    time.sleep(1)

    img_metadata = sa.get_image_metadata(project_folder, "example_image_1.jpg")
    assert img_metadata["is_pinned"] == 1

    sa.pin_image(project_folder, "example_image_1.jpg", True)
    time.sleep(1)
    img_metadata = sa.get_image_metadata(project_folder, "example_image_1.jpg")
    assert img_metadata["is_pinned"] == 1

    sa.pin_image(project_folder, "example_image_1.jpg", False)
    time.sleep(1)

    img_metadata = sa.get_image_metadata(project_folder, "example_image_1.jpg")
    assert img_metadata["is_pinned"] == 0

    del img_metadata["updatedAt"]
    del img_metadata0["updatedAt"]

    assert img_metadata == img_metadata0
Ejemplo n.º 17
0
def test_move_images(tmpdir):
    PROJECT_NAME = "test move folder images1"
    tmpdir = Path(tmpdir)

    projects_found = sa.search_projects(PROJECT_NAME, return_metadata=True)
    for pr in projects_found:
        sa.delete_project(pr)

    project = sa.create_project(PROJECT_NAME, 'test', 'Vector')
    sa.create_folder(project, "folder1")
    project = PROJECT_NAME + "/folder1"
    sa.upload_images_from_folder_to_project(project,
                                            FROM_FOLDER,
                                            annotation_status="InProgress")
    num_images = sa.get_project_image_count(project)
    assert num_images == 4

    sa.create_folder(PROJECT_NAME, "folder2")
    project2 = PROJECT_NAME + "/folder2"
    num_images = sa.get_project_image_count(project2)
    assert num_images == 0

    sa.move_images(project, ["example_image_2.jpg"], project2)

    num_images = sa.get_project_image_count(project2)
    assert num_images == 1

    num_images = sa.get_project_image_count(project)
    assert num_images == 3

    num_images = sa.get_project_image_count(PROJECT_NAME,
                                            with_all_subfolders=True)
    assert num_images == 4

    images = sa.search_images_all_folders(PROJECT_NAME)
    assert images == [
        "example_image_1.jpg", "example_image_2.jpg", "example_image_3.jpg",
        "example_image_4.jpg"
    ]
Ejemplo n.º 18
0
def test_folder_image_annotation_status(tmpdir):
    PROJECT_NAME = "test folder set annotation status"
    tmpdir = Path(tmpdir)

    projects_found = sa.search_projects(PROJECT_NAME, return_metadata=True)
    for pr in projects_found:
        sa.delete_project(pr)

    project = sa.create_project(PROJECT_NAME, 'test', 'Vector')
    sa.create_annotation_classes_from_classes_json(
        project, FROM_FOLDER / "classes" / "classes.json")
    sa.upload_images_from_folder_to_project(project,
                                            FROM_FOLDER,
                                            annotation_status="InProgress")
    sa.create_folder(project, "folder1")
    project = PROJECT_NAME + "/folder1"
    sa.upload_images_from_folder_to_project(project,
                                            FROM_FOLDER,
                                            annotation_status="InProgress")

    sa.set_images_annotation_statuses(
        project, ["example_image_1.jpg", "example_image_2.jpg"],
        "QualityCheck")

    for image in ["example_image_1.jpg", "example_image_2.jpg"]:
        metadata = sa.get_image_metadata(project, image)
        assert metadata["annotation_status"] == "QualityCheck"

    for image in ["example_image_3.jpg", "example_image_3.jpg"]:
        metadata = sa.get_image_metadata(project, image)
        assert metadata["annotation_status"] == "InProgress"

    sa.set_images_annotation_statuses(PROJECT_NAME, None, "QualityCheck")

    for image in sa.search_images(PROJECT_NAME):
        metadata = sa.get_image_metadata(PROJECT_NAME, image)
        assert metadata["annotation_status"] == "QualityCheck"
Ejemplo n.º 19
0
def test_folder_misnamed(tmpdir):
    PROJECT_NAME = "test folder misnamed"
    tmpdir = Path(tmpdir)

    projects_found = sa.search_projects(PROJECT_NAME, return_metadata=True)
    for pr in projects_found:
        sa.delete_project(pr)

    project = sa.create_project(PROJECT_NAME, 'test', 'Vector')
    sa.create_folder(project, "folder1")
    assert "folder1" in sa.search_folders(project)

    sa.create_folder(project, "folder1")
    assert "folder1 (1)" in sa.search_folders(project)

    sa.create_folder(project, "folder2\\")
    assert "folder2_" in sa.search_folders(project)
Ejemplo n.º 20
0
def test_rename_folder(tmpdir):
    PROJECT_NAME = "test rename folder"
    tmpdir = Path(tmpdir)

    projects_found = sa.search_projects(PROJECT_NAME, return_metadata=True)
    for pr in projects_found:
        sa.delete_project(pr)

    project = sa.create_project(PROJECT_NAME, 'test', 'Vector')
    sa.create_folder(project, "folder1")
    sa.create_folder(project, "folder2")
    sa.create_folder(project, "folder3")

    assert len(sa.search_folders(project)) == 3

    sa.rename_folder(project["name"] + "/folder1", "folder5")

    assert len(sa.search_folders(project)) == 3

    assert "folder5" in sa.search_folders(project)
    assert "folder1" not in sa.search_folders(project)

    print(sa.search_folders(project))
Ejemplo n.º 21
0
def test_basic_folders(tmpdir):
    PROJECT_NAME = "test folder simple"
    tmpdir = Path(tmpdir)

    projects_found = sa.search_projects(PROJECT_NAME, return_metadata=True)
    for pr in projects_found:
        sa.delete_project(pr)

    project = sa.create_project(PROJECT_NAME, 'test', 'Vector')
    project = project["name"]
    sa.upload_images_from_folder_to_project(project,
                                            FROM_FOLDER,
                                            annotation_status="InProgress")
    images = sa.search_images(project, "example_image_1")
    assert len(images) == 1

    folders = sa.search_folders(project)
    assert len(folders) == 0

    folder_metadata = sa.create_folder(project, "folder1")
    assert folder_metadata["name"] == "folder1"

    folders = sa.search_folders(project, return_metadata=True)
    assert len(folders) == 1

    assert folders[0]["name"] == "folder1"

    folders = sa.search_folders(project)
    assert len(folders) == 1

    assert folders[0] == "folder1"

    images = sa.search_images(project + "/folder1", "example_image_1")
    assert len(images) == 0

    images = sa.search_images_all_folders(project, "example_image_1")
    assert len(images) == 1

    folder = sa.get_folder_metadata(project, "folder1")
    assert isinstance(folder, dict)
    assert folder["name"] == "folder1"

    with pytest.raises(SABaseException) as e:
        folder = sa.get_folder_metadata(project, "folder2")
    assert 'Folder not found' in str(e)

    sa.upload_images_from_folder_to_project(project + "/folder1",
                                            FROM_FOLDER,
                                            annotation_status="InProgress")
    images = sa.search_images(project + "/folder1", "example_image_1")
    assert len(images) == 1

    sa.upload_images_from_folder_to_project(project + "/folder1",
                                            FROM_FOLDER,
                                            annotation_status="InProgress")
    images = sa.search_images(project + "/folder1")
    assert len(images) == 4

    with pytest.raises(SABaseException) as e:
        sa.upload_images_from_folder_to_project(project + "/folder2",
                                                FROM_FOLDER,
                                                annotation_status="InProgress")
    assert 'Folder not found' in str(e)

    folder_metadata = sa.create_folder(project, "folder2")
    assert folder_metadata["name"] == "folder2"

    folders = sa.search_folders(project)
    assert len(folders) == 2

    folders = sa.search_folders(project, folder_name="folder")
    assert len(folders) == 2

    folders = sa.search_folders(project, folder_name="folder2")
    assert len(folders) == 1
    assert folders[0] == "folder2"

    folders = sa.search_folders(project, folder_name="folder1")
    assert len(folders) == 1
    assert folders[0] == "folder1"

    folders = sa.search_folders(project, folder_name="old")
    assert len(folders) == 2