Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
255 changes: 122 additions & 133 deletions src/superannotate/lib/app/interface/sdk_interface.py

Large diffs are not rendered by default.

92 changes: 0 additions & 92 deletions src/superannotate/lib/core/serviceproviders.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,7 @@
from lib.core.service_types import IntegrationListResponse
from lib.core.service_types import ItemListResponse
from lib.core.service_types import ModelListResponse
from lib.core.service_types import ProjectListResponse
from lib.core.service_types import ProjectResponse
from lib.core.service_types import ServiceResponse
from lib.core.service_types import SettingsListResponse
from lib.core.service_types import SubsetListResponse
from lib.core.service_types import TeamResponse
from lib.core.service_types import UploadAnnotationAuthDataResponse
Expand Down Expand Up @@ -65,94 +62,6 @@ def __init__(self, client: BaseClient):
self.client = client


class BaseProjectService(SuperannotateServiceProvider):
@abstractmethod
def get(self, uuid: int):
raise NotImplementedError

@abstractmethod
def create(self, entity: entities.ProjectEntity) -> ProjectResponse:
raise NotImplementedError

@abstractmethod
def list(self, condition: Condition = None) -> ProjectListResponse:
raise NotImplementedError

@abstractmethod
def update(self, entity: entities.ProjectEntity) -> ProjectResponse:
raise NotImplementedError

@abstractmethod
def delete(self, entity: entities.ProjectEntity) -> ServiceResponse:
raise NotImplementedError

@abstractmethod
def list_settings(self, project: entities.ProjectEntity) -> SettingsListResponse:
raise NotImplementedError

@abstractmethod
def set_settings(
self, project: entities.ProjectEntity, data: List[entities.SettingEntity]
):
raise NotImplementedError

@abstractmethod
def list_workflows(self, project: entities.ProjectEntity):
raise NotImplementedError

@abstractmethod
def set_workflow(
self, project: entities.ProjectEntity, workflow: entities.WorkflowEntity
):
raise NotImplementedError

@abstractmethod
def set_workflows(self, project: entities.ProjectEntity, steps: list):
raise NotImplementedError

@abstractmethod
def share(self, project: entities.ProjectEntity, users: list) -> ServiceResponse:
raise NotImplementedError

@abstractmethod
def un_share(self, project: entities.ProjectEntity, user_id) -> ServiceResponse:
raise NotImplementedError

@abstractmethod
def set_project_workflow_attributes(
self, project: entities.ProjectEntity, attributes: list
):
raise NotImplementedError

@abstractmethod
def assign_items(
self,
project: entities.ProjectEntity,
folder: entities.FolderEntity,
user: str,
item_names: List[str],
) -> ServiceResponse:
raise NotImplementedError

@abstractmethod
def un_assign_items(
self,
project: entities.ProjectEntity,
folder: entities.FolderEntity,
item_names: List[str],
) -> ServiceResponse:
raise NotImplementedError

@abstractmethod
def upload_priority_scores(
self,
project: entities.ProjectEntity,
folder: entities.FolderEntity,
priorities: list,
) -> ServiceResponse:
raise NotImplementedError


class BaseAnnotationClassService(SuperannotateServiceProvider):
@abstractmethod
def create_multiple(
Expand Down Expand Up @@ -449,7 +358,6 @@ def attach_items(


class BaseServiceProvider:
projects: BaseProjectService
items: BaseItemService
annotations: BaseAnnotationService
custom_fields: BaseCustomFieldService
Expand Down
89 changes: 0 additions & 89 deletions src/superannotate/lib/core/usecases/annotations.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@
from lib.core.service_types import UploadAnnotationAuthData
from lib.core.serviceproviders import BaseServiceProvider
from lib.core.serviceproviders import ServiceResponse
from lib.core.types import PriorityScoreEntity
from lib.core.usecases.base import BaseReportableUseCase
from lib.core.video_convertor import VideoFrameGenerator
from lib.infrastructure.utils import divide_to_chunks
Expand Down Expand Up @@ -809,94 +808,6 @@ def execute(self):
return self._response


class UploadPriorityScoresUseCase(BaseReportableUseCase):
CHUNK_SIZE = 100

def __init__(
self,
reporter,
project: ProjectEntity,
folder: FolderEntity,
scores: List[PriorityScoreEntity],
project_folder_name: str,
service_provider: BaseServiceProvider,
):
super().__init__(reporter)
self._project = project
self._folder = folder
self._scores = scores
self._service_provider = service_provider
self._project_folder_name = project_folder_name

@staticmethod
def get_clean_priority(priority):
if len(str(priority)) > 8:
priority = float(str(priority)[:8])
if priority > 1000000:
priority = 1000000
if priority < 0:
priority = 0
if str(float(priority)).split(".")[1:2]:
if len(str(float(priority)).split(".")[1]) > 5:
priority = float(
str(float(priority)).split(".")[0]
+ "."
+ str(float(priority)).split(".")[1][:5]
)
return priority

@property
def folder_path(self):
return f"{self._project.name}{f'/{self._folder.name}' if self._folder.name != 'root' else ''}"

@property
def uploading_info(self):
data_len: int = len(self._scores)
return (
f"Uploading priority scores for {data_len} item(s) to {self.folder_path}."
)

def execute(self):
if self.is_valid():
priorities = []
initial_scores = []
for i in self._scores:
priorities.append(
{
"name": i.name,
"entropy_value": self.get_clean_priority(i.priority),
}
)
initial_scores.append(i.name)
uploaded_score_names = []
self.reporter.log_info(self.uploading_info)
iterations = range(0, len(priorities), self.CHUNK_SIZE)
self.reporter.start_progress(iterations, "Uploading priority scores")
if iterations:
for i in iterations:
priorities_to_upload = priorities[
i : i + self.CHUNK_SIZE
] # noqa: E203
res = self._service_provider.projects.upload_priority_scores(
project=self._project,
folder=self._folder,
priorities=priorities_to_upload,
)
_data = res.data["data"]
if not _data:
_data = []
self.reporter.update_progress(len(priorities_to_upload))
uploaded_score_names.extend(list(map(lambda x: x["name"], _data)))
self.reporter.finish_progress()
skipped_score_names = list(
set(initial_scores) - set(uploaded_score_names)
)
self._response.data = (uploaded_score_names, skipped_score_names)
else:
self.reporter.warning_messages("Empty scores.")
return self._response


class ValidateAnnotationUseCase(BaseReportableUseCase):
DEFAULT_VERSION = "V1.00"
SCHEMAS: Dict[str, superannotate_schemas.Draft7Validator] = {}
Expand Down
11 changes: 4 additions & 7 deletions src/superannotate/lib/core/usecases/images.py
Original file line number Diff line number Diff line change
Expand Up @@ -850,8 +850,8 @@ class UploadImagesToProject(BaseInteractiveUseCase):

def __init__(
self,
project: ProjectEntity,
folder: FolderEntity,
project: Project,
folder: Folder,
s3_repo,
service_provider: BaseServiceProvider,
paths: List[str],
Expand Down Expand Up @@ -1234,11 +1234,8 @@ def execute(self):
huge_image, huge_width, huge_height = image_processor.generate_huge()
quality = 60
if not self._image_quality_in_editor:
_response = self._service_provider.projects.list_settings(self._project)
if not _response.ok:
self._response.errors = AppException(_response.error)
return self._response
for setting in _response.data:
settings = self._project.list_settings()
for setting in settings:
if setting.attribute == "ImageQuality":
quality = setting.value
else:
Expand Down
Loading