Skip to content

Commit 31de2ec

Browse files
authored
Merge pull request #425 from superannotateai/friday_search_items
Added search/get items
2 parents 3a9bc1b + 402d1bc commit 31de2ec

File tree

20 files changed

+151
-496
lines changed

20 files changed

+151
-496
lines changed

docs/source/superannotate.sdk.rst

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ ________
3636
.. autofunction:: superannotate.delete_folders
3737
.. autofunction:: superannotate.upload_images_to_project
3838
.. autofunction:: superannotate.attach_image_urls_to_project
39-
.. autofunction:: superannotate.upload_images_from_public_urls_to_project
4039
.. autofunction:: superannotate.attach_document_urls_to_project
4140
.. autofunction:: superannotate.attach_items_from_integrated_storage
4241
.. autofunction:: superannotate.upload_image_to_project

src/superannotate/__init__.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,6 @@
101101
from superannotate.lib.app.interface.sdk_interface import (
102102
upload_images_from_folder_to_project,
103103
)
104-
from superannotate.lib.app.interface.sdk_interface import (
105-
upload_images_from_public_urls_to_project,
106-
)
107104
from superannotate.lib.app.interface.sdk_interface import upload_images_to_project
108105
from superannotate.lib.app.interface.sdk_interface import (
109106
upload_preannotations_from_folder_to_project,
@@ -193,7 +190,6 @@
193190
"delete_annotations",
194191
"upload_image_to_project",
195192
"upload_image_annotations",
196-
"upload_images_from_public_urls_to_project",
197193
"upload_images_from_folder_to_project",
198194
"attach_image_urls_to_project",
199195
"attach_video_urls_to_project",

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

Lines changed: 0 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -520,60 +520,6 @@ def copy_image(
520520
)
521521

522522

523-
@Trackable
524-
@validate_arguments
525-
def upload_images_from_public_urls_to_project(
526-
project: Union[NotEmptyStr, dict],
527-
img_urls: List[NotEmptyStr],
528-
img_names: Optional[List[NotEmptyStr]] = None,
529-
annotation_status: Optional[AnnotationStatuses] = "NotStarted",
530-
image_quality_in_editor: Optional[NotEmptyStr] = None,
531-
):
532-
"""Uploads all images given in the list of URL strings in img_urls to the project.
533-
Sets status of all the uploaded images to annotation_status if it is not None.
534-
535-
:param project: project name or folder path (e.g., "project1/folder1")
536-
:type project: str
537-
:param img_urls: list of str objects to upload
538-
:type img_urls: list
539-
:param img_names: list of str names for each urls in img_url list
540-
:type img_names: list
541-
:param annotation_status: value to set the annotation statuses of the uploaded images
542-
NotStarted InProgress QualityCheck Returned Completed Skipped
543-
:type annotation_status: str
544-
:param image_quality_in_editor: image quality be seen in SuperAnnotate web annotation editor.
545-
Can be either "compressed" or "original". If None then the default value in project settings will be used.
546-
:type image_quality_in_editor: str
547-
548-
:return: uploaded images' urls, uploaded images' filenames, duplicate images' filenames
549-
and not-uploaded images' urls
550-
:rtype: tuple of list of strs
551-
"""
552-
warning_msg = (
553-
"The upload_images_from_public_urls function is deprecated and will be removed with the coming release, "
554-
"please use attach_image_urls_to_project instead."
555-
)
556-
logger.warning(warning_msg)
557-
warnings.warn(warning_msg, DeprecationWarning)
558-
559-
project_name, folder_name = extract_project_folder(project)
560-
561-
use_case = Controller.get_default().upload_images_from_public_urls_to_project(
562-
project_name=project_name,
563-
folder_name=folder_name,
564-
image_urls=img_urls,
565-
image_names=img_names,
566-
annotation_status=annotation_status,
567-
image_quality_in_editor=image_quality_in_editor,
568-
)
569-
if use_case.is_valid():
570-
with tqdm(total=len(img_urls), desc="Uploading images") as progress_bar:
571-
for _ in use_case.execute():
572-
progress_bar.update(1)
573-
return use_case.data
574-
raise AppException(use_case.response.errors)
575-
576-
577523
@Trackable
578524
@validate_arguments
579525
def copy_images(

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

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,13 @@
99

1010
from .utils import parsers
1111

12-
1312
logger = get_default_logger()
1413

1514

1615
def get_mp_instance() -> Mixpanel:
17-
try:
18-
if "api.annotate.online" in get_default_controller()._backend_client.api_url:
19-
return Mixpanel("ca95ed96f80e8ec3be791e2d3097cf51")
20-
finally:
21-
return Mixpanel("e741d4863e7e05b1a45833d01865ef0d")
16+
if "api.annotate.online" in get_default_controller()._backend_url:
17+
return Mixpanel("ca95ed96f80e8ec3be791e2d3097cf51")
18+
return Mixpanel("e741d4863e7e05b1a45833d01865ef0d")
2219

2320

2421
def get_default(team_name, user_id, project_name=None):

src/superannotate/lib/app/mixp/utils/parsers.py

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -173,26 +173,6 @@ def upload_image_to_project(*args, **kwargs):
173173
}
174174

175175

176-
def upload_images_from_public_urls_to_project(*args, **kwargs):
177-
project = kwargs.get("project", None)
178-
if not project:
179-
project = args[0]
180-
img_urls = kwargs.get("img_urls", [])
181-
if not img_urls:
182-
img_urls += args[1]
183-
return {
184-
"event_name": "upload_images_from_public_urls_to_project",
185-
"properties": {
186-
"Image Count": len(img_urls),
187-
"Image Name": bool(args[2:3] or kwargs.get("img_names", None)),
188-
"Annotation Status": bool(
189-
args[3:4] or kwargs.get("annotation_status", None)
190-
),
191-
"project_name": get_project_name(project),
192-
},
193-
}
194-
195-
196176
def upload_video_to_project(*args, **kwargs):
197177
project = kwargs.get("project", None)
198178
if not project:

src/superannotate/lib/core/entities/__init__.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
from lib.core.entities.integrations import IntegrationEntity
2+
from lib.core.entities.items import DocumentEntity
3+
from lib.core.entities.items import Entity
4+
from lib.core.entities.items import TmpBaseEntity
5+
from lib.core.entities.items import TmpImageEntity
6+
from lib.core.entities.items import VideoEntity
27
from lib.core.entities.project_entities import AnnotationClassEntity
38
from lib.core.entities.project_entities import BaseEntity
49
from lib.core.entities.project_entities import ConfigEntity
5-
from lib.core.entities.project_entities import Entity
610
from lib.core.entities.project_entities import FolderEntity
711
from lib.core.entities.project_entities import ImageEntity
812
from lib.core.entities.project_entities import ImageInfoEntity
@@ -22,8 +26,13 @@
2226
)
2327

2428
__all__ = [
29+
# items
2530
"BaseEntity",
31+
"TmpBaseEntity",
2632
"Entity",
33+
"VideoEntity",
34+
"DocumentEntity",
35+
# project
2736
"ProjectEntity",
2837
"ProjectSettingEntity",
2938
"ConfigEntity",
Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
from lib.core.entities.base import TimedBaseModel
2+
from lib.core.enums import IntegrationTypeEnum
3+
24
from pydantic import Field
5+
from pydantic import Extra
36

47

58
class IntegrationEntity(TimedBaseModel):
69
id: int = None
710
user_id: str = None
811
name: str
9-
type: str = "aws"
12+
type: IntegrationTypeEnum = Field(None, alias="source")
1013
root: str = Field(None, alias="bucket_name")
11-
source: int = None
1214

1315
class Config:
14-
arbitrary_types_allowed = True
16+
extra = Extra.ignore
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
from typing import Optional
2+
3+
from lib.core.enums import AnnotationStatus
4+
from lib.core.enums import SegmentationStatus
5+
6+
from pydantic import BaseModel
7+
from pydantic import Extra
8+
from pydantic import Field
9+
10+
11+
class TmpBaseEntity(BaseModel):
12+
id: int
13+
name: str
14+
path: Optional[str] = Field(None, description="Item’s path in SuperAnnotate project")
15+
url: Optional[str] = Field(None, description="Publicly available HTTP address")
16+
annotation_status: AnnotationStatus = Field(description="Item annotation status")
17+
annotator_name: Optional[str] = Field(description="Annotator email")
18+
qa_name: Optional[str] = Field(description="QA email")
19+
entropy_value: Optional[str] = Field(description="Priority score of given item")
20+
createdAt: str = Field(description="Date of creation")
21+
updatedAt: str = Field(description="Update date")
22+
23+
class Config:
24+
extra = Extra.allow
25+
26+
def add_path(self, project_name: str, folder_name: str):
27+
path = f"{project_name}{f'/{folder_name}' if folder_name != 'root' else ''}/{self.name}"
28+
self.path = path
29+
return self
30+
31+
32+
class Entity(TmpBaseEntity):
33+
class Config:
34+
extra = Extra.allow
35+
36+
37+
class TmpImageEntity(Entity):
38+
prediction_status: Optional[SegmentationStatus] = Field(SegmentationStatus.NOT_STARTED)
39+
segmentation_status: Optional[SegmentationStatus] = Field(SegmentationStatus.NOT_STARTED)
40+
approval_status: bool = None
41+
42+
class Config:
43+
extra = Extra.ignore
44+
45+
46+
class VideoEntity(Entity):
47+
class Config:
48+
ignore_extra = True
49+
50+
51+
class DocumentEntity(Entity):
52+
class Config:
53+
ignore_extra = True

src/superannotate/lib/core/entities/project_entities.py

Lines changed: 0 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,10 @@
33
from typing import Any
44
from typing import Iterable
55
from typing import List
6-
from typing import Optional
76
from typing import Union
87

9-
from lib.core.enums import AnnotationStatus
108
from lib.core.enums import ClassTypeEnum
119
from lib.core.enums import SegmentationStatus
12-
from pydantic import BaseModel
13-
from pydantic import Extra
14-
from pydantic import Field
1510
from superannotate_schemas.schemas.classes import AnnotationClass
1611

1712

@@ -484,44 +479,3 @@ def to_dict(self):
484479
"is_global": self.is_global,
485480
**self.hyper_parameters,
486481
}
487-
488-
489-
class Entity(BaseModel):
490-
id: int
491-
name: str
492-
path: Optional[str] = Field(None, description="Item’s path in SuperAnnotate project")
493-
url: Optional[str] = Field(None, description="Publicly available HTTP address")
494-
annotation_status: AnnotationStatus = Field(description="Item annotation status")
495-
annotator_name: Optional[str] = Field(description="Annotator email")
496-
qa_name: Optional[str] = Field(description="QA email")
497-
entropy_value: Optional[str] = Field(description="Priority score of given item")
498-
created_at: str = Field(alias="createdAt", description="Date of creation")
499-
updated_at: str = Field(alias="updatedAt", description="Update date")
500-
501-
class Config:
502-
extra = Extra.allow
503-
504-
def add_path(self, project_name: str, folder_name: str):
505-
path = f"{project_name}{f'/{folder_name}' if folder_name != 'root' else ''}/{self.name}"
506-
self.path = path
507-
return self
508-
509-
510-
class TmpImageEntity(Entity):
511-
prediction_status: Optional[SegmentationStatus] = Field(SegmentationStatus.NOT_STARTED)
512-
segmentation_status: Optional[SegmentationStatus] = Field(SegmentationStatus.NOT_STARTED)
513-
approval_status: bool = None
514-
515-
class Config:
516-
arbitrary_types_allowed = False
517-
ignore_extra = True
518-
519-
520-
class VideoEntity(Entity):
521-
class Config:
522-
ignore_extra = True
523-
524-
525-
class DocumentEntity(Entity):
526-
class Config:
527-
ignore_extra = True

src/superannotate/lib/core/enums.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,12 @@ def get_value(cls, name):
104104
return cls.OBJECT.value
105105

106106

107+
class IntegrationTypeEnum(BaseTitledEnum):
108+
AWS = "aws", 1
109+
GCP = "gcp", 2
110+
AZURE = "azure", 3
111+
112+
107113
class TrainingStatus(BaseTitledEnum):
108114
NOT_STARTED = "NotStarted", 1
109115
IN_PROGRESS = "InProgress", 2

0 commit comments

Comments
 (0)