Skip to content

Commit 9831d8c

Browse files
committed
folder to project_folder
1 parent 7d1a3ba commit 9831d8c

File tree

3 files changed

+69
-24
lines changed

3 files changed

+69
-24
lines changed

superannotate/db/images.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def search_images(
3737
image_name_prefix=None,
3838
annotation_status=None,
3939
return_metadata=False,
40-
folder=None
40+
project_folder=None
4141
):
4242
"""Search images by name_prefix (case-insensitive) and annotation status
4343
@@ -63,8 +63,8 @@ def search_images(
6363
annotation_status
6464
)
6565

66-
if folder is not None:
67-
folder = get_folder_metadata(project, folder)
66+
if project_folder is not None:
67+
folder = get_folder_metadata(project, project_folder)
6868
folder = folder["id"]
6969

7070
result_list = []
@@ -73,7 +73,7 @@ def search_images(
7373
'project_id': project_id,
7474
'annotation_status': annotation_status,
7575
'offset': 0,
76-
'folder_id': folder
76+
'folder_id': project_folder
7777
}
7878
if image_name_prefix is not None:
7979
params['name'] = image_name_prefix
@@ -119,7 +119,10 @@ def process_result(x):
119119

120120
@project_metadata
121121
def get_image_metadata(
122-
project, image_names, return_dict_on_single_output=True, folder=None
122+
project,
123+
image_names,
124+
return_dict_on_single_output=True,
125+
project_folder=None
123126
):
124127
"""Returns image metadata
125128
@@ -138,6 +141,7 @@ def get_image_metadata(
138141
'project_id': project['id'],
139142
'team_id': _api.team_id,
140143
'names': image_names
144+
'folder_id': project_folder
141145
}
142146
response = _api.send_request(
143147
req_type='POST',

superannotate/db/projects.py

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -440,7 +440,7 @@ def upload_images_from_folder_to_project(
440440
exclude_file_patterns=None,
441441
recursive_subfolders=False,
442442
image_quality_in_editor=None,
443-
folder=None
443+
project_folder=None
444444
):
445445
"""Uploads all images with given extensions from folder_path to the project.
446446
Sets status of all the uploaded images to set_status if it is not None.
@@ -538,7 +538,7 @@ def upload_images_from_folder_to_project(
538538

539539
return upload_images_to_project(
540540
project, filtered_paths, annotation_status, from_s3_bucket,
541-
image_quality_in_editor, folder
541+
image_quality_in_editor, project_folder
542542
)
543543

544544

@@ -765,7 +765,7 @@ def upload_images_to_project(
765765
annotation_status="NotStarted",
766766
from_s3_bucket=None,
767767
image_quality_in_editor=None,
768-
folder=None
768+
project_folder=None
769769
):
770770
"""Uploads all images given in list of path objects in img_paths to the project.
771771
Sets status of all the uploaded images to set_status if it is not None.
@@ -801,7 +801,7 @@ def upload_images_to_project(
801801
project
802802
)
803803
team_id, project_id = project["team_id"], project["id"]
804-
existing_images = search_images(project, folder=folder)
804+
existing_images = search_images(project, project_folder=project_folder)
805805
duplicate_images = []
806806
for existing_image in existing_images:
807807
i = -1
@@ -1172,7 +1172,7 @@ def upload_images_from_azure_blob_to_project(
11721172
def __upload_annotations_thread(
11731173
team_id, project_id, project_type, anns_filenames, folder_path,
11741174
annotation_classes_dict, pre, thread_id, chunksize, missing_images,
1175-
couldnt_upload, uploaded, from_s3_bucket
1175+
couldnt_upload, uploaded, from_s3_bucket, project_folder
11761176
):
11771177
NUM_TO_SEND = 500
11781178
len_anns = len(anns_filenames)
@@ -1215,7 +1215,8 @@ def __upload_annotations_thread(
12151215
data = {
12161216
"project_id": project_id,
12171217
"team_id": team_id,
1218-
"ids": [metadata["id"] for metadata in metadatas]
1218+
"ids": [metadata["id"] for metadata in metadatas],
1219+
"folder_id": project_folder
12191220
}
12201221
endpoint = '/images/getAnnotationsPathsAndTokens' if pre == "" else '/images/getPreAnnotationsPathsAndTokens'
12211222
response = _api.send_request(
@@ -1282,7 +1283,11 @@ def __upload_annotations_thread(
12821283

12831284

12841285
def upload_annotations_from_folder_to_project(
1285-
project, folder_path, from_s3_bucket=None, recursive_subfolders=False
1286+
project,
1287+
folder_path,
1288+
from_s3_bucket=None,
1289+
recursive_subfolders=False,
1290+
project_folder=None
12861291
):
12871292
"""Finds and uploads all JSON files in the folder_path as annotations to the project.
12881293
@@ -1306,12 +1311,18 @@ def upload_annotations_from_folder_to_project(
13061311
:rtype: tuple of list of strs
13071312
"""
13081313
return _upload_pre_or_annotations_from_folder_to_project(
1309-
project, folder_path, "", from_s3_bucket, recursive_subfolders
1314+
project, folder_path, "", from_s3_bucket, recursive_subfolders,
1315+
project_folder
13101316
)
13111317

13121318

13131319
def _upload_pre_or_annotations_from_folder_to_project(
1314-
project, folder_path, pre, from_s3_bucket=None, recursive_subfolders=False
1320+
project,
1321+
folder_path,
1322+
pre,
1323+
from_s3_bucket=None,
1324+
recursive_subfolders=False,
1325+
project_folder=None
13151326
):
13161327
if recursive_subfolders:
13171328
logger.info(
@@ -1328,12 +1339,18 @@ def _upload_pre_or_annotations_from_folder_to_project(
13281339
project = get_project_metadata_bare(project)
13291340

13301341
return _upload_annotations_from_folder_to_project(
1331-
project, folder_path, pre, from_s3_bucket, recursive_subfolders
1342+
project, folder_path, pre, from_s3_bucket, recursive_subfolders,
1343+
project_folder
13321344
)
13331345

13341346

13351347
def _upload_annotations_from_folder_to_project(
1336-
project, folder_path, pre, from_s3_bucket=None, recursive_subfolders=False
1348+
project,
1349+
folder_path,
1350+
pre,
1351+
from_s3_bucket=None,
1352+
recursive_subfolders=False,
1353+
project_folder=None
13371354
):
13381355
return_result = []
13391356
if from_s3_bucket is not None:
@@ -1344,7 +1361,8 @@ def _upload_annotations_from_folder_to_project(
13441361
for path in Path(folder_path).glob('*'):
13451362
if path.is_dir():
13461363
return_result += _upload_annotations_from_folder_to_project(
1347-
project, path, pre, from_s3_bucket, recursive_subfolders
1364+
project, path, pre, from_s3_bucket,
1365+
recursive_subfolders, project_folder
13481366
)
13491367
else:
13501368
s3_client = boto3.client('s3')
@@ -1356,7 +1374,7 @@ def _upload_annotations_from_folder_to_project(
13561374
for o in results:
13571375
return_result += _upload_annotations_from_folder_to_project(
13581376
project, o.get('Prefix'), pre, from_s3_bucket,
1359-
recursive_subfolders
1377+
recursive_subfolders, project_folder
13601378
)
13611379

13621380
team_id, project_id, project_type = project["team_id"], project[
@@ -1430,7 +1448,8 @@ def _upload_annotations_from_folder_to_project(
14301448
args=(
14311449
team_id, project_id, project_type, annotations_filenames,
14321450
folder_path, annotation_classes_dict, pre, thread_id, chunksize,
1433-
missing_image, couldnt_upload, uploaded, from_s3_bucket
1451+
missing_image, couldnt_upload, uploaded, from_s3_bucket,
1452+
project_folder
14341453
),
14351454
daemon=True
14361455
)

tests/test_folders.py

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,9 @@ def test_basic_folders(tmpdir):
4040

4141
assert folders[0] == "folder1"
4242

43-
images = sa.search_images(project, "example_image_1", folder="folder1")
43+
images = sa.search_images(
44+
project, "example_image_1", project_folder="folder1"
45+
)
4446
assert len(images) == 0
4547

4648
folder = sa.get_folder_metadata(project, "folder1")
@@ -52,10 +54,30 @@ def test_basic_folders(tmpdir):
5254
assert 'Folder not found' in str(e)
5355

5456
sa.upload_images_from_folder_to_project(
55-
project, FROM_FOLDER, annotation_status="InProgress", folder="folder1"
57+
project,
58+
FROM_FOLDER,
59+
annotation_status="InProgress",
60+
project_folder="folder1"
61+
)
62+
images = sa.search_images(
63+
project, "example_image_1", project_folder="folder1"
5664
)
57-
images = sa.search_images(project, "example_image_1", folder="folder1")
5865
assert len(images) == 1
5966

60-
print(sa.search_images(project))
61-
print(sa.search_images(project, folder="folder1"))
67+
sa.upload_images_from_folder_to_project(
68+
project,
69+
FROM_FOLDER,
70+
annotation_status="InProgress",
71+
project_folder="folder1"
72+
)
73+
images = sa.search_images(project, project_folder="folder1")
74+
assert len(images) == 4
75+
76+
with pytest.raises(SABaseException) as e:
77+
sa.upload_images_from_folder_to_project(
78+
project,
79+
FROM_FOLDER,
80+
annotation_status="InProgress",
81+
project_folder="folder2"
82+
)
83+
assert 'Folder not found' in str(e)

0 commit comments

Comments
 (0)