Skip to content

Commit 8698998

Browse files
authored
Merge pull request #599 from superannotateai/1900_auth
changed SDK auth flow
2 parents 7d9336b + 16eb528 commit 8698998

File tree

17 files changed

+107
-126
lines changed

17 files changed

+107
-126
lines changed

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -132,11 +132,11 @@ def get_mp_instance(self) -> Mixpanel:
132132
return Mixpanel(mp_token)
133133

134134
@staticmethod
135-
def get_default_payload(team_name, user_id):
135+
def get_default_payload(team_name, user_email):
136136
return {
137137
"SDK": True,
138138
"Team": team_name,
139-
"Team Owner": user_id,
139+
"User Email": user_email,
140140
"Version": __version__,
141141
"Python version": platform.python_version(),
142142
"Python interpreter type": platform.python_implementation(),
@@ -207,13 +207,13 @@ def _track_method(self, args, kwargs, success: bool):
207207
function_name = self.function.__name__ if self.function else ""
208208
arguments = self.extract_arguments(self.function, *args, **kwargs)
209209
event_name, properties = self.default_parser(function_name, arguments)
210-
user_id = client.controller.team_data.creator_id
210+
user_email = client.controller.current_user.email
211211
team_name = client.controller.team_data.name
212212

213213
properties["Success"] = success
214-
default = self.get_default_payload(team_name=team_name, user_id=user_id)
214+
default = self.get_default_payload(team_name=team_name, user_email=user_email)
215215
self._track(
216-
user_id,
216+
user_email,
217217
event_name,
218218
{**default, **properties, **CONFIG.get_current_session().data},
219219
)

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1717,7 +1717,7 @@ def upload_annotations_from_folder_to_project(
17171717
response = self.controller.annotations.upload_from_folder(
17181718
project=project,
17191719
folder=folder,
1720-
team=self.controller.team,
1720+
user=self.controller.current_user,
17211721
annotation_paths=annotation_paths, # noqa: E203
17221722
client_s3_bucket=from_s3_bucket,
17231723
folder_path=folder_path,
@@ -1794,7 +1794,7 @@ def upload_image_annotations(
17941794
folder=folder,
17951795
image=image,
17961796
annotations=annotation_json,
1797-
team=self.controller.team,
1797+
user=self.controller.current_user,
17981798
mask=mask,
17991799
verbose=verbose,
18001800
keep_status=keep_status,
@@ -2155,7 +2155,9 @@ def add_contributors_to_project(
21552155
for email in emails
21562156
]
21572157
response = self.controller.projects.add_contributors(
2158-
team=self.controller.get_team().data, project=project, contributors=contributors
2158+
team=self.controller.get_team().data,
2159+
project=project,
2160+
contributors=contributors,
21592161
)
21602162
if response.errors:
21612163
raise AppException(response.errors)

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from lib.core.entities.project import ProjectEntity
1717
from lib.core.entities.project import SettingEntity
1818
from lib.core.entities.project import TeamEntity
19+
from lib.core.entities.project import UserEntity
1920
from lib.core.entities.project import WorkflowEntity
2021
from lib.core.entities.project_entities import BaseEntity
2122
from lib.core.entities.project_entities import ImageInfoEntity
@@ -47,6 +48,7 @@
4748
"S3FileEntity",
4849
"AnnotationClassEntity",
4950
"TeamEntity",
51+
"UserEntity",
5052
"MLModelEntity",
5153
"IntegrationEntity",
5254
]

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,9 +169,11 @@ class UserEntity(BaseModel):
169169
first_name: Optional[str]
170170
last_name: Optional[str]
171171
email: Optional[str]
172-
picture: Optional[str]
173172
user_role: Optional[int]
174173

174+
class Config:
175+
extra = Extra.ignore
176+
175177

176178
class TeamEntity(BaseModel):
177179
id: Optional[int]

src/superannotate/lib/core/repositories.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
from abc import ABC
2-
from abc import abstractmethod
32
from typing import Any
43
from typing import List
54
from typing import Optional
@@ -12,24 +11,20 @@
1211

1312

1413
class BaseReadOnlyRepository(ABC):
15-
1614
def get_one(self, uuid: Union[Condition, int]) -> Optional[Union[BaseModel]]:
1715
raise NotImplementedError
1816

19-
2017
def get_all(self, condition: Optional[Condition] = None) -> List[Union[BaseModel]]:
2118
raise NotImplementedError
2219

2320

2421
class BaseManageableRepository(BaseReadOnlyRepository):
25-
2622
def insert(self, entity: BaseEntity) -> BaseEntity:
2723
raise NotImplementedError
2824

2925
def update(self, entity: BaseEntity) -> BaseEntity:
3026
raise NotImplementedError
3127

32-
3328
def delete(self, uuid: Any):
3429
raise NotImplementedError
3530

src/superannotate/lib/core/service_types.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,10 @@ class TeamResponse(ServiceResponse):
150150
data: entities.TeamEntity = None
151151

152152

153+
class UserResponse(ServiceResponse):
154+
data: entities.UserEntity = None
155+
156+
153157
class ModelListResponse(ServiceResponse):
154158
data: List[entities.AnnotationClassEntity] = None
155159

src/superannotate/lib/core/serviceproviders.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
from lib.core.service_types import UploadAnnotationsResponse
2727
from lib.core.service_types import UploadCustomFieldValuesResponse
2828
from lib.core.service_types import UserLimitsResponse
29+
from lib.core.service_types import UserResponse
2930
from lib.core.types import Attachment
3031
from lib.core.types import AttachmentMeta
3132

@@ -507,6 +508,10 @@ class BaseServiceProvider:
507508
def get_team(self, team_id: int) -> TeamResponse:
508509
raise NotImplementedError
509510

511+
@abstractmethod
512+
def get_user(self, team_id: int) -> UserResponse:
513+
raise NotImplementedError
514+
510515
@abstractmethod
511516
def list_templates(self) -> ServiceResponse:
512517
raise NotImplementedError

src/superannotate/lib/core/usecases/annotations.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
from lib.core.entities import FolderEntity
3838
from lib.core.entities import ImageEntity
3939
from lib.core.entities import ProjectEntity
40-
from lib.core.entities import TeamEntity
40+
from lib.core.entities import UserEntity
4141
from lib.core.exceptions import AppException
4242
from lib.core.reporter import Reporter
4343
from lib.core.response import Response
@@ -482,7 +482,7 @@ def __init__(
482482
reporter: Reporter,
483483
project: ProjectEntity,
484484
folder: FolderEntity,
485-
team: TeamEntity,
485+
user: UserEntity,
486486
annotation_paths: List[str],
487487
service_provider: BaseServiceProvider,
488488
pre_annotation: bool = False,
@@ -493,7 +493,7 @@ def __init__(
493493
super().__init__(reporter)
494494
self._project = project
495495
self._folder = folder
496-
self._team = team
496+
self._user = user
497497
self._service_provider = service_provider
498498
self._annotation_classes = service_provider.annotation_classes.list(
499499
Condition("project_id", project.id, EQ)
@@ -581,7 +581,7 @@ def prepare_annotation(self, annotation: dict, size) -> dict:
581581
raise AppException(errors)
582582

583583
annotation = UploadAnnotationUseCase.set_defaults(
584-
self._team.creator_id, annotation, self._project.type
584+
self._user.email, annotation, self._project.type
585585
)
586586
return annotation
587587

@@ -827,7 +827,7 @@ def __init__(
827827
project: ProjectEntity,
828828
folder: FolderEntity,
829829
image: ImageEntity,
830-
team: TeamEntity,
830+
user: UserEntity,
831831
service_provider: BaseServiceProvider,
832832
reporter: Reporter,
833833
annotation_upload_data: UploadAnnotationAuthData = None,
@@ -844,7 +844,7 @@ def __init__(
844844
self._project = project
845845
self._folder = folder
846846
self._image = image
847-
self._team = team
847+
self._user = user
848848
self._service_provider = service_provider
849849
self._annotation_classes = service_provider.annotation_classes.list(
850850
Condition("project_id", project.id, EQ)
@@ -973,7 +973,7 @@ def execute(self):
973973
annotation_json, mask = self._get_annotation_json()
974974
errors = self._validate_json(annotation_json)
975975
annotation_json = UploadAnnotationUseCase.set_defaults(
976-
self._team.creator_id, annotation_json, self._project.type
976+
self._user.email, annotation_json, self._project.type
977977
)
978978
if not errors:
979979
annotation_file = io.StringIO()

src/superannotate/lib/core/usecases/models.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -507,7 +507,9 @@ def execute(self):
507507
failed_images = []
508508
while len(success_images) + len(failed_images) != len(image_ids):
509509
images_metadata = self._service_provider.items.list_by_names(
510-
project=self._project, folder=self._folder, names=self._images_list
510+
project=self._project,
511+
folder=self._folder,
512+
names=self._images_list,
511513
).data
512514

513515
success_images = [

src/superannotate/lib/core/usecases/projects.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -609,6 +609,23 @@ def execute(self):
609609
return self._response
610610

611611

612+
class GetCurrentUserUseCase(BaseUseCase):
613+
def __init__(self, service_provider: BaseServiceProvider, team_id: int):
614+
super().__init__()
615+
self._service_provider = service_provider
616+
self._team_id = team_id
617+
618+
def execute(self):
619+
response = self._service_provider.get_user(self._team_id)
620+
if not response.ok:
621+
self._response.errors = AppException(
622+
"Unable to retrieve user data. Please verify your credentials."
623+
)
624+
else:
625+
self._response.data = response.data
626+
return self._response
627+
628+
612629
class SearchContributorsUseCase(BaseUseCase):
613630
def __init__(
614631
self,

0 commit comments

Comments
 (0)