Skip to content

Commit 41b6bf5

Browse files
authored
Merge pull request #25 from superannotateai/merge-develop
Merge develop
2 parents 60dfd0f + 455afdc commit 41b6bf5

File tree

16 files changed

+634
-542
lines changed

16 files changed

+634
-542
lines changed

superannotate/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@ def consensus(*args, **kwargs):
5050
download_image_preannotations, get_image_annotations, get_image_bytes,
5151
get_image_metadata, get_image_preannotations, search_images,
5252
search_images_all_folders, set_image_annotation_status,
53-
set_images_annotation_statuses, upload_image_annotations, get_project_root_folder_id
53+
set_images_annotation_statuses, upload_image_annotations,
54+
get_project_root_folder_id
5455
)
5556
from .db.project_api import (
5657
create_folder, delete_folders, get_folder_metadata,

superannotate/common.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,11 @@
5252
}
5353

5454
_MODEL_TRAINING_TASKS = {
55-
"Instance Segmentation for Pixel Projects" : "instance_segmentation_pixel",
56-
"Instance Segmentation for Vector Projects" : "instance_segmentation_vector",
57-
"Keypoint Detection for Vector Projects" : "keypoint_detection_vector",
58-
"Object Detection for Vector Projects" : "object_detection_vector",
59-
"Semantic Segmentation for Pixel Projects" : "semantic_segmentation_pixel"
55+
"Instance Segmentation for Pixel Projects": "instance_segmentation_pixel",
56+
"Instance Segmentation for Vector Projects": "instance_segmentation_vector",
57+
"Keypoint Detection for Vector Projects": "keypoint_detection_vector",
58+
"Object Detection for Vector Projects": "object_detection_vector",
59+
"Semantic Segmentation for Pixel Projects": "semantic_segmentation_pixel"
6060
}
6161

6262

superannotate/db/images.py

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
search_annotation_classes
2626
)
2727
from .project_api import get_project_and_folder_metadata, get_project_metadata_bare
28+
from .utils import _get_boto_session_by_credentials
2829

2930
logger = logging.getLogger("superannotate-python-sdk")
3031

@@ -38,16 +39,17 @@ def get_project_root_folder_id(project):
3839
int
3940
Root folder ID
4041
"""
41-
params = {'team_id': project['team_id']}
42-
response = _api.send_request(
43-
req_type='GET', path=f'/project/{project["id"]}', params=params
44-
)
42+
params = {
43+
'team_id': project['team_id'],
44+
'project_id': project['id'],
45+
'is_root': 1
46+
}
47+
response = _api.send_request(req_type='GET', path='/folders', params=params)
4548
if not response.ok:
4649
raise SABaseException(response.status_code, response.text)
4750

4851
response = response.json()
49-
50-
return response['folder_id']
52+
return response['data'][0]['id']
5153

5254

5355
def search_images(
@@ -232,7 +234,10 @@ def get_image_metadata(project, image_names, return_dict_on_single_output=True):
232234
project_folder_id = None
233235

234236
chunk_size = 500
235-
chunks = [image_names[i:i + chunk_size] for i in range(0, len(image_names), chunk_size)]
237+
chunks = [
238+
image_names[i:i + chunk_size]
239+
for i in range(0, len(image_names), chunk_size)
240+
]
236241

237242
json_req = {
238243
'project_id': project['id'],
@@ -249,13 +254,16 @@ def get_image_metadata(project, image_names, return_dict_on_single_output=True):
249254
req_type='POST',
250255
path='/images/getBulk',
251256
json_req=json_req,
252-
)
257+
)
253258
if not response.ok:
254-
raise SABaseException(response.status_code,"Couldn't get image metadata. " + response.text)
259+
raise SABaseException(
260+
response.status_code,
261+
"Couldn't get image metadata. " + response.text
262+
)
255263
metadata_raw += response.json()
256264

257265
metadata_without_deleted = []
258-
metadata_without_deleted = [ i for i in metadata_raw if i['delete'] != 1 ]
266+
metadata_without_deleted = [i for i in metadata_raw if i['delete'] != 1]
259267

260268
if len(metadata_without_deleted) == 0:
261269
raise SABaseException(
@@ -1001,11 +1009,7 @@ def upload_image_annotations(
10011009
)
10021010
res = response.json()
10031011
res_json = res['annotation_json_path']
1004-
s3_session = boto3.Session(
1005-
aws_access_key_id=res_json['accessKeyId'],
1006-
aws_secret_access_key=res_json['secretAccessKey'],
1007-
aws_session_token=res_json['sessionToken']
1008-
)
1012+
s3_session = _get_boto_session_by_credentials(res_json)
10091013
s3_resource = s3_session.resource('s3')
10101014
bucket = s3_resource.Bucket(res_json["bucket"])
10111015
bucket.put_object(
@@ -1018,11 +1022,7 @@ def upload_image_annotations(
10181022
with open(mask, "rb") as f:
10191023
mask = io.BytesIO(f.read())
10201024
res_mask = res['annotation_bluemap_path']
1021-
s3_session = boto3.Session(
1022-
aws_access_key_id=res_mask['accessKeyId'],
1023-
aws_secret_access_key=res_mask['secretAccessKey'],
1024-
aws_session_token=res_mask['sessionToken']
1025-
)
1025+
s3_session = _get_boto_session_by_credentials(res_mask)
10261026
bucket = s3_resource.Bucket(res_mask["bucket"])
10271027
bucket.put_object(Key=res_mask['filePath'], Body=mask)
10281028

superannotate/db/project_images.py

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,9 @@
1616
)
1717
from .project_api import get_project_and_folder_metadata
1818
from .projects import (
19-
__create_image, get_image_array_to_upload,
20-
get_project_default_image_quality_in_editor, upload_image_array_to_s3,
21-
_get_available_image_counts
19+
get_project_default_image_quality_in_editor, _get_available_image_counts
2220
)
23-
from .utils import _get_upload_auth_token
21+
from .utils import _get_upload_auth_token, _get_boto_session_by_credentials, upload_image_array_to_s3, get_image_array_to_upload, __create_image
2422

2523
logger = logging.getLogger("superannotate-python-sdk")
2624
_api = API.get_instance()
@@ -104,11 +102,7 @@ def upload_image_to_project(
104102
params = {'team_id': team_id, 'folder_id': folder_id}
105103
res = _get_upload_auth_token(params=params, project_id=project_id)
106104
prefix = res['filePath']
107-
s3_session = boto3.Session(
108-
aws_access_key_id=res['accessKeyId'],
109-
aws_secret_access_key=res['secretAccessKey'],
110-
aws_session_token=res['sessionToken']
111-
)
105+
s3_session = _get_boto_session_by_credentials(res)
112106
s3_resource = s3_session.resource('s3')
113107
bucket = s3_resource.Bucket(res["bucket"])
114108
try:
@@ -329,9 +323,11 @@ def move_images(
329323
)
330324
if image_names is None:
331325
image_names = search_images((source_project, source_project_folder))
332-
copy_images((source_project, source_project_folder), image_names,
333-
(destination_project, destination_project_folder),
334-
include_annotations, copy_annotation_status, copy_pin)
326+
copy_images(
327+
(source_project, source_project_folder), image_names,
328+
(destination_project, destination_project_folder), include_annotations,
329+
copy_annotation_status, copy_pin
330+
)
335331
delete_images((source_project, source_project_folder), image_names)
336332
logger.info(
337333
"Moved images %s from project %s to project %s", image_names,

0 commit comments

Comments
 (0)