Skip to content

Commit 69b9fae

Browse files
committed
in progress changes
1 parent f48a5d1 commit 69b9fae

File tree

4 files changed

+72
-8
lines changed

4 files changed

+72
-8
lines changed

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

Lines changed: 40 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -650,28 +650,62 @@ def set_images_annotation_statuses(
650650
logger.info("Annotations status of images changed")
651651

652652
def delete_images(
653-
self, project: Union[NotEmptyStr, dict], image_names: Optional[List[str]] = None
653+
self, project: Union[NotEmptyStr, dict], image_names: Optional[list[str]] = None
654654
):
655-
"""Delete images in project.
655+
"""delete images in project.
656656
657657
:param project: project name or folder path (e.g., "project1/folder1")
658658
:type project: str
659-
:param image_names: to be deleted images' names. If None, all the images will be deleted
659+
:param image_names: to be deleted images' names. if none, all the images will be deleted
660660
:type image_names: list of strs
661661
"""
662+
663+
warning_msg = (
664+
"We're deprecating the delete_images function. Please use delete_items instead."
665+
"Learn more. \n"
666+
"https://superannotate.readthedocs.io/en/stable/superannotate.sdk.html#superannotate.assign_items"
667+
)
668+
logger.warning(warning_msg)
669+
warnings.warn(warning_msg, DeprecationWarning)
662670
project_name, folder_name = extract_project_folder(project)
663671

664-
if not isinstance(image_names, list) and image_names is not None:
665-
raise AppException("Image_names should be a list of str or None.")
672+
if not isinstance(image_names, list) and image_names is not none:
673+
raise appexception("image_names should be a list of str or none.")
666674

667675
response = self.controller.delete_images(
668676
project_name=project_name, folder_name=folder_name, image_names=image_names
669677
)
678+
if response.errors:
679+
raise appexception(response.errors)
680+
681+
logger.info(
682+
f"images deleted in project {project_name}{'/' + folder_name if folder_name else ''}"
683+
)
684+
685+
def delete_items(
686+
self, project: str, items: Optional[List[str]] = None
687+
):
688+
"""Delete items in a given project.
689+
690+
:param project: project name or folder path (e.g., "project1/folder1")
691+
:type project: str
692+
:param items: to be deleted items' names. If None, all the items will be deleted
693+
:type items: list of str
694+
"""
695+
project_name, folder_name = extract_project_folder(project)
696+
697+
## Type checking should be done in controller or by PyDantic?
698+
# if not isinstance(image_names, list) and image_names is not None:
699+
# raise AppException("Image_names should be a list of str or None.")
700+
701+
response = self.controller.delete_items(
702+
project_name=project_name, folder_name=folder_name, items=items
703+
)
670704
if response.errors:
671705
raise AppException(response.errors)
672706

673707
logger.info(
674-
f"Images deleted in project {project_name}{'/' + folder_name if folder_name else ''}"
708+
f"Items deleted in project {project_name}{'/' + folder_name if folder_name else ''}"
675709
)
676710

677711
def assign_items(

src/superannotate/lib/core/service_types.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ def __init__(self, response, content_type=None):
8080
"content": response.content,
8181
}
8282
if response.ok:
83-
if content_type:
83+
if content_type and content_type is not self.__class__:
8484
data["data"] = content_type(**response.json())
8585
else:
8686
data["data"] = response.json()
@@ -92,4 +92,5 @@ def ok(self):
9292

9393
@property
9494
def error(self):
95-
return getattr(self.data, "error", "Unknown error.")
95+
default_message = self.data["reason"] if self.data["reason"] else "Unknown error"
96+
return getattr(self.data, "error", default_message)

src/superannotate/lib/infrastructure/controller.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -835,6 +835,23 @@ def delete_images(
835835
)
836836
return use_case.execute()
837837

838+
def delete_items(
839+
self,
840+
project_name: str,
841+
folder_name: str,
842+
items: List[str] = None,
843+
):
844+
project = self._get_project(project_name)
845+
folder = self._get_folder(project, folder_name)
846+
847+
use_case = usecases.DeleteItemsUseCase(
848+
project=project,
849+
folder=folder,
850+
items=items,
851+
backend_service_provider=self._backend_client,
852+
)
853+
return use_case.execute()
854+
838855
def assign_items(
839856
self, project_name: str, folder_name: str, item_names: list, user: str
840857
):

src/superannotate/lib/infrastructure/services.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ class SuperannotateBackendService(BaseBackendService):
202202
URL_GET_ITEMS = "items"
203203
URL_BULK_GET_IMAGES = "images/getBulk"
204204
URL_DELETE_FOLDERS = "image/delete/images"
205+
URL_DELETE_ITEMS = "image/delete/images"
205206
URL_CREATE_IMAGE = "image/ext-create"
206207
URL_PROJECT_SETTINGS = "project/{}/settings"
207208
URL_PROJECT_WORKFLOW = "project/{}/workflow"
@@ -717,6 +718,17 @@ def delete_images(self, project_id: int, team_id: int, image_ids: List[int]):
717718
)
718719
return res.json()
719720

721+
def delete_items(self, project_id: int, team_id: int, item_ids: List[int]):
722+
delete_items_url = urljoin(self.api_url, self.URL_DELETE_ITEMS)
723+
res = self._request(
724+
delete_items_url,
725+
"put",
726+
params={"team_id": team_id, "project_id": project_id},
727+
data={"image_ids": item_ids},
728+
)
729+
730+
return ServiceResponse(res, ServiceResponse)
731+
720732
def assign_images(
721733
self,
722734
team_id: int,

0 commit comments

Comments
 (0)