Skip to content

Commit b2bacd0

Browse files
committed
Changed project creation
1 parent 2a07bb0 commit b2bacd0

File tree

27 files changed

+587
-561
lines changed

27 files changed

+587
-561
lines changed

docs/source/superannotate.sdk.rst

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ ________
2929
.. _ref_get_project_metadata:
3030
.. autofunction:: superannotate.get_project_metadata
3131
.. autofunction:: superannotate.get_project_image_count
32-
.. autofunction:: superannotate.get_project_and_folder_metadata
3332
.. autofunction:: superannotate.search_folders
3433
.. autofunction:: superannotate.get_folder_metadata
3534
.. autofunction:: superannotate.create_folder

pytest.ini

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
minversion = 3.0
33
log_cli=true
44
python_files = test_*.py
5-
;addopts = -n auto --dist=loadscope
5+
addopts = -n auto --dist=loadscope

src/superannotate/__init__.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,6 @@
6262
from superannotate.lib.app.interface.sdk_interface import get_image_metadata
6363
from superannotate.lib.app.interface.sdk_interface import get_integrations
6464
from superannotate.lib.app.interface.sdk_interface import get_item_metadata
65-
from superannotate.lib.app.interface.sdk_interface import (
66-
get_project_and_folder_metadata,
67-
)
6865
from superannotate.lib.app.interface.sdk_interface import get_project_image_count
6966
from superannotate.lib.app.interface.sdk_interface import get_project_metadata
7067
from superannotate.lib.app.interface.sdk_interface import get_project_settings
@@ -170,7 +167,6 @@
170167
"create_folder",
171168
"get_folder_metadata",
172169
"delete_folders",
173-
"get_project_and_folder_metadata",
174170
"search_folders",
175171
"assign_folder",
176172
"unassign_folder",

src/superannotate/lib/app/interface/cli_interface.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ def _upload_annotations(
207207
dataset_format=format,
208208
dataset_name=dataset_name,
209209
project_type=constances.ProjectType.get_name(
210-
project["project"].project_type
210+
project["project"].type
211211
),
212212
task=task,
213213
)

src/superannotate/lib/app/interface/sdk_interface.py

Lines changed: 41 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,12 @@
1212
from typing import Union
1313

1414
import boto3
15+
from pydantic import StrictBool
16+
from pydantic import conlist
17+
from pydantic import parse_obj_as
18+
from pydantic.error_wrappers import ValidationError
19+
from tqdm import tqdm
20+
1521
import lib.core as constances
1622
from lib.app.annotation_helpers import add_annotation_bbox_to_json
1723
from lib.app.annotation_helpers import add_annotation_comment_to_json
@@ -52,12 +58,7 @@
5258
from lib.core.types import PriorityScore
5359
from lib.core.types import Project
5460
from lib.infrastructure.controller import Controller
55-
from pydantic import conlist
56-
from pydantic import parse_obj_as
57-
from pydantic import StrictBool
58-
from pydantic.error_wrappers import ValidationError
5961
from superannotate.logger import get_default_logger
60-
from tqdm import tqdm
6162

6263
logger = get_default_logger()
6364

@@ -171,8 +172,13 @@ def search_projects(
171172
)
172173
.data
173174
)
175+
174176
if return_metadata:
175-
return [ProjectSerializer(project).serialize() for project in result]
177+
return [
178+
ProjectSerializer(project).serialize(
179+
exclude={"annotation_classes", "workflows", "settings", "contributors", "classes"}
180+
) for project in result
181+
]
176182
else:
177183
return [project.name for project in result]
178184

@@ -231,7 +237,7 @@ def create_project_from_metadata(project_metadata: Project):
231237
description=project_metadata.get("description"),
232238
project_type=project_metadata["type"],
233239
settings=parse_obj_as(List[SettingEntity], project_metadata.get("settings", [])),
234-
annotation_classes=project_metadata.get("classes", []),
240+
classes=project_metadata.get("classes", []),
235241
workflows=project_metadata.get("workflows", []),
236242
instructions_link=project_metadata.get("instructions_link"),
237243
)
@@ -391,7 +397,7 @@ def rename_project(project: NotEmptyStr, new_name: NotEmptyStr):
391397
)
392398
if response.errors:
393399
raise AppException(response.errors)
394-
400+
return ProjectSerializer(response.data).serialize()
395401
logger.info(
396402
"Successfully renamed project %s to %s.", project, response.data["name"]
397403
)
@@ -439,34 +445,6 @@ def delete_folders(project: NotEmptyStr, folder_names: List[NotEmptyStr]):
439445
logger.info(f"Folders {folder_names} deleted in project {project}")
440446

441447

442-
@Trackable
443-
@validate_arguments
444-
def get_project_and_folder_metadata(project: Union[NotEmptyStr, dict]):
445-
"""Returns project and folder metadata tuple. If folder part is empty,
446-
than returned folder part is set to None.
447-
448-
:param project: project name or folder path (e.g., "project1/folder1")
449-
:type project: str
450-
451-
:return: tuple of project and folder
452-
:rtype: tuple
453-
"""
454-
warning_msg = (
455-
"The get_project_and_folder_metadata function is deprecated and will be removed with the coming release, "
456-
"please use get_folder_metadata instead."
457-
)
458-
logger.warning(warning_msg)
459-
warnings.warn(warning_msg, DeprecationWarning)
460-
project_name, folder_name = extract_project_folder(project)
461-
project = ProjectSerializer(
462-
Controller.get_default().search_project(project_name).data[0]
463-
).serialize()
464-
folder = None
465-
if folder_name:
466-
folder = get_folder_metadata(project_name, folder_name)
467-
return project, folder
468-
469-
470448
@Trackable
471449
@validate_arguments
472450
def search_folders(
@@ -538,15 +516,15 @@ def copy_image(
538516
Controller.get_default().get_project_metadata(destination_project).data
539517
)
540518

541-
if destination_project_metadata["project"].project_type in [
519+
if destination_project_metadata["project"].type in [
542520
constances.ProjectType.VIDEO.value,
543521
constances.ProjectType.DOCUMENT.value,
544-
] or source_project_metadata["project"].project_type in [
522+
] or source_project_metadata["project"].type in [
545523
constances.ProjectType.VIDEO.value,
546524
constances.ProjectType.DOCUMENT.value,
547525
]:
548526
raise AppException(
549-
LIMITED_FUNCTIONS[source_project_metadata["project"].project_type]
527+
LIMITED_FUNCTIONS[source_project_metadata["project"].type]
550528
)
551529

552530
response = Controller.get_default().copy_image(
@@ -683,11 +661,11 @@ def move_images(
683661
project_name, source_folder_name = extract_project_folder(source_project)
684662

685663
project = Controller.get_default().get_project_metadata(project_name).data
686-
if project["project"].project_type in [
664+
if project["project"].type in [
687665
constances.ProjectType.VIDEO.value,
688666
constances.ProjectType.DOCUMENT.value,
689667
]:
690-
raise AppException(LIMITED_FUNCTIONS[project["project"].project_type])
668+
raise AppException(LIMITED_FUNCTIONS[project["project"].type])
691669

692670
to_project_name, destination_folder_name = extract_project_folder(
693671
destination_project
@@ -779,18 +757,13 @@ def get_project_metadata(
779757
)
780758

781759
metadata = ProjectSerializer(response["project"]).serialize()
782-
metadata["settings"] = [
783-
SettingsSerializer(setting).serialize()
784-
for setting in response.get("settings", [])
785-
]
786760

787761
for elem in "classes", "workflows", "contributors":
788762
if response.get(elem):
789763
metadata[elem] = [
790-
BaseSerializer(attribute).serialize() for attribute in response[elem]
764+
BaseSerializer(attribute).serialize() for attribute in
765+
response[elem]
791766
]
792-
else:
793-
metadata[elem] = []
794767
return metadata
795768

796769

@@ -1008,11 +981,11 @@ def assign_images(project: Union[NotEmptyStr, dict], image_names: List[str], use
1008981
project_name, folder_name = extract_project_folder(project)
1009982
project = Controller.get_default().get_project_metadata(project_name).data
1010983

1011-
if project["project"].project_type in [
984+
if project["project"].type in [
1012985
constances.ProjectType.VIDEO.value,
1013986
constances.ProjectType.DOCUMENT.value,
1014987
]:
1015-
raise AppException(LIMITED_FUNCTIONS[project["project"].project_type])
988+
raise AppException(LIMITED_FUNCTIONS[project["project"].type])
1016989

1017990
contributors = (
1018991
Controller.get_default()
@@ -1849,13 +1822,13 @@ def attach_image_urls_to_project(
18491822
project = Controller.get_default().get_project_metadata(project_name).data
18501823
project_folder_name = project_name + (f"/{folder_name}" if folder_name else "")
18511824

1852-
if project["project"].project_type in [
1825+
if project["project"].type in [
18531826
constances.ProjectType.VIDEO.value,
18541827
constances.ProjectType.DOCUMENT.value,
18551828
]:
18561829
raise AppException(
18571830
constances.INVALID_PROJECT_TYPE_TO_PROCESS.format(
1858-
constances.ProjectType.get_name(project["project"].project_type)
1831+
constances.ProjectType.get_name(project["project"].type)
18591832
)
18601833
)
18611834
images_to_upload, duplicate_images = get_paths_and_duplicated_from_csv(attachments)
@@ -1922,10 +1895,10 @@ def attach_video_urls_to_project(
19221895
project = Controller.get_default().get_project_metadata(project_name).data
19231896
project_folder_name = project_name + (f"/{folder_name}" if folder_name else "")
19241897

1925-
if project["project"].project_type != constances.ProjectType.VIDEO.value:
1898+
if project["project"].type != constances.ProjectType.VIDEO.value:
19261899
raise AppException(
19271900
constances.INVALID_PROJECT_TYPE_TO_PROCESS.format(
1928-
constances.ProjectType.get_name(project["project"].project_type)
1901+
constances.ProjectType.get_name(project["project"].type)
19291902
)
19301903
)
19311904

@@ -2062,11 +2035,11 @@ def upload_preannotations_from_folder_to_project(
20622035
project_name, folder_name = extract_project_folder(project)
20632036
project_folder_name = project_name + (f"/{folder_name}" if folder_name else "")
20642037
project = Controller.get_default().get_project_metadata(project_name).data
2065-
if project["project"].project_type in [
2038+
if project["project"].type in [
20662039
constances.ProjectType.VIDEO.value,
20672040
constances.ProjectType.DOCUMENT.value,
20682041
]:
2069-
raise AppException(LIMITED_FUNCTIONS[project["project"].project_type])
2042+
raise AppException(LIMITED_FUNCTIONS[project["project"].type])
20702043
if recursive_subfolders:
20712044
logger.info(
20722045
"When using recursive subfolder parsing same name annotations in different "
@@ -2120,11 +2093,11 @@ def upload_image_annotations(
21202093
project_name, folder_name = extract_project_folder(project)
21212094

21222095
project = Controller.get_default().get_project_metadata(project_name).data
2123-
if project["project"].project_type in [
2096+
if project["project"].type in [
21242097
constances.ProjectType.VIDEO.value,
21252098
constances.ProjectType.DOCUMENT.value,
21262099
]:
2127-
raise AppException(LIMITED_FUNCTIONS[project["project"].project_type])
2100+
raise AppException(LIMITED_FUNCTIONS[project["project"].type])
21282101

21292102
if not mask:
21302103
if not isinstance(annotation_json, dict):
@@ -2211,11 +2184,11 @@ def benchmark(
22112184
project_name = project["name"]
22122185

22132186
project = Controller.get_default().get_project_metadata(project_name).data
2214-
if project["project"].project_type in [
2187+
if project["project"].type in [
22152188
constances.ProjectType.VIDEO.value,
22162189
constances.ProjectType.DOCUMENT.value,
22172190
]:
2218-
raise AppException(LIMITED_FUNCTIONS[project["project"].project_type])
2191+
raise AppException(LIMITED_FUNCTIONS[project["project"].type])
22192192

22202193
if not export_root:
22212194
with tempfile.TemporaryDirectory() as temp_dir:
@@ -2369,11 +2342,11 @@ def add_annotation_bbox_to_image(
23692342
"""
23702343
project_name, folder_name = extract_project_folder(project)
23712344
project = Controller.get_default().get_project_metadata(project_name).data
2372-
if project["project"].project_type in [
2345+
if project["project"].type in [
23732346
constances.ProjectType.VIDEO.value,
23742347
constances.ProjectType.DOCUMENT.value,
23752348
]:
2376-
raise AppException(LIMITED_FUNCTIONS[project["project"].project_type])
2349+
raise AppException(LIMITED_FUNCTIONS[project["project"].type])
23772350
response = Controller.get_default().get_annotations(
23782351
project_name=project_name, folder_name=folder_name, item_names=[image_name], logging=False
23792352
)
@@ -2426,11 +2399,11 @@ def add_annotation_point_to_image(
24262399
"""
24272400
project_name, folder_name = extract_project_folder(project)
24282401
project = Controller.get_default().get_project_metadata(project_name).data
2429-
if project["project"].project_type in [
2402+
if project["project"].type in [
24302403
constances.ProjectType.VIDEO.value,
24312404
constances.ProjectType.DOCUMENT.value,
24322405
]:
2433-
raise AppException(LIMITED_FUNCTIONS[project["project"].project_type])
2406+
raise AppException(LIMITED_FUNCTIONS[project["project"].type])
24342407
response = Controller.get_default().get_annotations(
24352408
project_name=project_name, folder_name=folder_name, item_names=[image_name], logging=False
24362409
)
@@ -2480,11 +2453,11 @@ def add_annotation_comment_to_image(
24802453
"""
24812454
project_name, folder_name = extract_project_folder(project)
24822455
project = Controller.get_default().get_project_metadata(project_name).data
2483-
if project["project"].project_type in [
2456+
if project["project"].type in [
24842457
constances.ProjectType.VIDEO.value,
24852458
constances.ProjectType.DOCUMENT.value,
24862459
]:
2487-
raise AppException(LIMITED_FUNCTIONS[project["project"].project_type])
2460+
raise AppException(LIMITED_FUNCTIONS[project["project"].type])
24882461
response = Controller.get_default().get_annotations(
24892462
project_name=project_name, folder_name=folder_name, item_names=[image_name], logging=False
24902463
)
@@ -2793,10 +2766,10 @@ def attach_document_urls_to_project(
27932766
project = Controller.get_default().get_project_metadata(project_name).data
27942767
project_folder_name = project_name + (f"/{folder_name}" if folder_name else "")
27952768

2796-
if project["project"].project_type != constances.ProjectType.DOCUMENT.value:
2769+
if project["project"].type != constances.ProjectType.DOCUMENT.value:
27972770
raise AppException(
27982771
constances.INVALID_PROJECT_TYPE_TO_PROCESS.format(
2799-
constances.ProjectType.get_name(project["project"].project_type)
2772+
constances.ProjectType.get_name(project["project"].type)
28002773
)
28012774
)
28022775

0 commit comments

Comments
 (0)