Skip to content

Commit 55d9f52

Browse files
committed
Udpated tests, fixed issues
1 parent 9b6d979 commit 55d9f52

35 files changed

+603
-927
lines changed

docs/source/superannotate.sdk.rst

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@ ______
8989
.. autofunction:: superannotate.download_image
9090
.. autofunction:: superannotate.set_image_annotation_status
9191
.. autofunction:: superannotate.set_images_annotation_statuses
92-
.. autofunction:: superannotate.get_image_annotations
9392
.. autofunction:: superannotate.download_image_annotations
9493
.. autofunction:: superannotate.upload_image_annotations
9594
.. autofunction:: superannotate.copy_image

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 & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@
5757
from superannotate.lib.app.interface.sdk_interface import get_annotations_per_frame
5858
from superannotate.lib.app.interface.sdk_interface import get_exports
5959
from superannotate.lib.app.interface.sdk_interface import get_folder_metadata
60-
from superannotate.lib.app.interface.sdk_interface import get_image_annotations
6160
from superannotate.lib.app.interface.sdk_interface import get_image_metadata
6261
from superannotate.lib.app.interface.sdk_interface import get_integrations
6362
from superannotate.lib.app.interface.sdk_interface import get_item_metadata
@@ -206,7 +205,6 @@
206205
"add_annotation_bbox_to_image",
207206
"add_annotation_point_to_image",
208207
"add_annotation_comment_to_image",
209-
"get_image_annotations",
210208
"search_annotation_classes",
211209
"create_annotation_classes_from_classes_json",
212210
"upload_annotations_from_folder_to_project",

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

Lines changed: 26 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,8 @@ def create_project_from_metadata(project_metadata: Project):
215215
settings=project_metadata.get("settings", []),
216216
annotation_classes=project_metadata.get("classes", []),
217217
workflows=project_metadata.get("workflows", []),
218+
attachment_path=project_metadata.get("attachment_path"),
219+
attachment_name=project_metadata.get("attachment_name"),
218220
)
219221
if response.errors:
220222
raise AppException(response.errors)
@@ -973,8 +975,6 @@ def assign_images(project: Union[NotEmptyStr, dict], image_names: List[str], use
973975
]:
974976
raise AppException(LIMITED_FUNCTIONS[project["project"].project_type])
975977

976-
if not folder_name:
977-
folder_name = "root"
978978
contributors = (
979979
Controller.get_default()
980980
.get_project_metadata(project_name=project_name, include_contributors=True)
@@ -1117,38 +1117,6 @@ def share_project(
11171117
raise AppException(response.errors)
11181118

11191119

1120-
@Trackable
1121-
@validate_arguments
1122-
def get_image_annotations(project: Union[NotEmptyStr, dict], image_name: NotEmptyStr):
1123-
"""Get annotations of the image.
1124-
1125-
:param project: project name or folder path (e.g., "project1/folder1")
1126-
:type project: str
1127-
:param image_name: image name
1128-
:type image_name: str
1129-
1130-
:return: dict object with following keys:
1131-
"annotation_json": dict object of the annotation,
1132-
"annotation_json_filename": filename on server,
1133-
"annotation_mask": mask (for pixel),
1134-
"annotation_mask_filename": mask filename on server
1135-
:rtype: dict
1136-
"""
1137-
warning_msg = (
1138-
"The get_image_annotations function is deprecated and will be removed with the coming releases, "
1139-
"please use get_annotations instead."
1140-
)
1141-
logger.warning(warning_msg)
1142-
warnings.warn(warning_msg, DeprecationWarning)
1143-
project_name, folder_name = extract_project_folder(project)
1144-
res = Controller.get_default().get_image_annotations(
1145-
project_name=project_name, folder_name=folder_name, image_name=image_name
1146-
)
1147-
if res.errors:
1148-
raise AppException(res.errors)
1149-
return res.data
1150-
1151-
11521120
@validate_arguments
11531121
def upload_images_from_folder_to_project(
11541122
project: Union[NotEmptyStr, dict],
@@ -2349,8 +2317,14 @@ def add_annotation_bbox_to_image(
23492317
:type error: bool
23502318
"""
23512319
project_name, folder_name = extract_project_folder(project)
2320+
project = Controller.get_default().get_project_metadata(project_name).data
2321+
if project["project"].project_type in [
2322+
constances.ProjectType.VIDEO.value,
2323+
constances.ProjectType.DOCUMENT.value,
2324+
]:
2325+
raise AppException(LIMITED_FUNCTIONS[project["project"].project_type])
23522326
response = Controller.get_default().get_annotations(
2353-
project_name=project_name, folder_name=folder_name, item_names=[image_name]
2327+
project_name=project_name, folder_name=folder_name, item_names=[image_name], logging=False
23542328
)
23552329
if response.errors:
23562330
raise AppException(response.errors)
@@ -2368,7 +2342,7 @@ def add_annotation_bbox_to_image(
23682342
)
23692343

23702344
Controller.get_default().upload_image_annotations(
2371-
*extract_project_folder(project), image_name, annotations
2345+
project_name, folder_name, image_name, annotations
23722346
)
23732347

23742348

@@ -2400,8 +2374,14 @@ def add_annotation_point_to_image(
24002374
:type error: bool
24012375
"""
24022376
project_name, folder_name = extract_project_folder(project)
2377+
project = Controller.get_default().get_project_metadata(project_name).data
2378+
if project["project"].project_type in [
2379+
constances.ProjectType.VIDEO.value,
2380+
constances.ProjectType.DOCUMENT.value,
2381+
]:
2382+
raise AppException(LIMITED_FUNCTIONS[project["project"].project_type])
24032383
response = Controller.get_default().get_annotations(
2404-
project_name=project_name, folder_name=folder_name, item_names=[image_name]
2384+
project_name=project_name, folder_name=folder_name, item_names=[image_name], logging=False
24052385
)
24062386
if response.errors:
24072387
raise AppException(response.errors)
@@ -2418,7 +2398,7 @@ def add_annotation_point_to_image(
24182398
error,
24192399
)
24202400
Controller.get_default().upload_image_annotations(
2421-
*extract_project_folder(project), image_name, annotations
2401+
project_name, folder_name, image_name, annotations
24222402
)
24232403

24242404

@@ -2448,8 +2428,14 @@ def add_annotation_comment_to_image(
24482428
:type resolved: bool
24492429
"""
24502430
project_name, folder_name = extract_project_folder(project)
2431+
project = Controller.get_default().get_project_metadata(project_name).data
2432+
if project["project"].project_type in [
2433+
constances.ProjectType.VIDEO.value,
2434+
constances.ProjectType.DOCUMENT.value,
2435+
]:
2436+
raise AppException(LIMITED_FUNCTIONS[project["project"].project_type])
24512437
response = Controller.get_default().get_annotations(
2452-
project_name=project_name, folder_name=folder_name, item_names=[image_name]
2438+
project_name=project_name, folder_name=folder_name, item_names=[image_name], logging=False
24532439
)
24542440
if response.errors:
24552441
raise AppException(response.errors)
@@ -2466,7 +2452,7 @@ def add_annotation_comment_to_image(
24662452
image_name=image_name,
24672453
)
24682454
Controller.get_default().upload_image_annotations(
2469-
*extract_project_folder(project), image_name, annotations
2455+
project_name, folder_name, image_name, annotations
24702456
)
24712457

24722458

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ class ProjectTypes(StrictStr):
9797
def validate(cls, value: Union[str]) -> Union[str]:
9898
if value.lower() not in ProjectType.values():
9999
raise TypeError(
100-
f"Available annotation_statuses are {', '.join(ProjectType.titles())}. "
100+
f" Available project types are {', '.join(ProjectType.titles())}. "
101101
)
102102
return value
103103

src/superannotate/lib/app/mixp/decorators.py

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,17 +53,44 @@ def extract_arguments(function, *args, **kwargs) -> dict:
5353
def team(self):
5454
return get_default_controller().get_team()
5555

56+
@staticmethod
57+
def default_parser(function_name: str, kwargs: dict):
58+
properties = {}
59+
for key, value in kwargs:
60+
if isinstance(value, (str, int, float, bool, str)):
61+
properties[key] = value
62+
elif isinstance(value, (list, set, tuple)):
63+
properties[key] = len(value)
64+
elif isinstance(value, dict):
65+
properties[key] = value.keys()
66+
elif hasattr(value, "__len__"):
67+
properties[key] = len(value)
68+
else:
69+
properties[key] = str(value)
70+
return {
71+
"event_name": function_name,
72+
"properties": properties
73+
}
74+
5675
def track(self, *args, **kwargs):
5776
try:
77+
function_name = self.function.__name__ if self.function else ""
5878
if self._initial:
5979
data = self.INITIAL_EVENT
6080
Trackable.INITIAL_LOGGED = True
6181
self._success = True
6282
else:
83+
data = {}
6384
arguments = self.extract_arguments(self.function, *args, **kwargs)
64-
data = getattr(parsers, self.function.__name__)(**arguments)
65-
event_name = data["event_name"]
66-
properties = data["properties"]
85+
if hasattr(parsers, function_name):
86+
try:
87+
data = getattr(parsers, function_name)(**arguments)
88+
except Exception:
89+
pass
90+
else:
91+
data = self.default_parser(function_name, arguments)
92+
event_name = data.get("event_name", )
93+
properties = data.get("properties", {})
6794
team_data = self.team.data
6895
user_id = team_data.creator_id
6996
team_name = team_data.name
@@ -78,7 +105,7 @@ def track(self, *args, **kwargs):
78105

79106
if "pytest" not in sys.modules:
80107
get_mp_instance().track(user_id, event_name, properties)
81-
except Exception as _:
108+
except Exception:
82109
pass
83110

84111
def __call__(self, *args, **kwargs):

0 commit comments

Comments
 (0)