Skip to content

Commit fd18915

Browse files
committed
service response serialzier update
1 parent a14ad12 commit fd18915

File tree

10 files changed

+223
-208
lines changed

10 files changed

+223
-208
lines changed

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

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ def version():
2929

3030
@staticmethod
3131
def init(
32-
token: str,
33-
logging_level: str = "INFO",
34-
logging_path: str = constances.LOG_FILE_LOCATION,
32+
token: str,
33+
logging_level: str = "INFO",
34+
logging_path: str = constances.LOG_FILE_LOCATION,
3535
):
3636
"""
3737
To initialize CLI (and SDK) with team token
@@ -53,7 +53,7 @@ def init(
5353
if Path(constances.CONFIG_INI_FILE_LOCATION).exists():
5454
operation = "updated"
5555
if not input(
56-
f"File {constances.CONFIG_INI_FILE_LOCATION} exists. Do you want to overwrite? [y/n] : "
56+
f"File {constances.CONFIG_INI_FILE_LOCATION} exists. Do you want to overwrite? [y/n] : "
5757
).lower() in ("y", "yes"):
5858
return
5959
else:
@@ -84,14 +84,14 @@ def create_folder(self, project: str, name: str):
8484
sys.exit(0)
8585

8686
def upload_images(
87-
self,
88-
project: str,
89-
folder: str,
90-
extensions: str = constances.DEFAULT_IMAGE_EXTENSIONS,
91-
set_annotation_status: str = constances.AnnotationStatus.NOT_STARTED.name,
92-
exclude_file_patterns=constances.DEFAULT_FILE_EXCLUDE_PATTERNS,
93-
recursive_subfolders=False,
94-
image_quality_in_editor=None,
87+
self,
88+
project: str,
89+
folder: str,
90+
extensions: str = constances.DEFAULT_IMAGE_EXTENSIONS,
91+
set_annotation_status: str = constances.AnnotationStatus.NOT_STARTED.name,
92+
exclude_file_patterns=constances.DEFAULT_FILE_EXCLUDE_PATTERNS,
93+
recursive_subfolders=False,
94+
image_quality_in_editor=None,
9595
):
9696
"""
9797
To upload images from folder to project use:
@@ -115,12 +115,12 @@ def upload_images(
115115
sys.exit(0)
116116

117117
def export_project(
118-
self,
119-
project,
120-
folder,
121-
include_fuse=False,
122-
disable_extract_zip_contents=False,
123-
annotation_statuses=None,
118+
self,
119+
project,
120+
folder,
121+
include_fuse=False,
122+
disable_extract_zip_contents=False,
123+
annotation_statuses=None,
124124
):
125125
project_name, folder_name = split_project_path(project)
126126
folders = None
@@ -146,7 +146,7 @@ def export_project(
146146
sys.exit(0)
147147

148148
def upload_annotations(
149-
self, project, folder, dataset_name=None, task=None, format=None
149+
self, project, folder, dataset_name=None, task=None, format=None
150150
):
151151
"""
152152
To upload annotations from folder to project use
@@ -196,10 +196,10 @@ def _upload_annotations(self, project, folder, format, dataset_name, task):
196196
sys.exit(0)
197197

198198
def attach_image_urls(
199-
self,
200-
project: str,
201-
attachments: str,
202-
annotation_status: Optional[Any] = "NotStarted",
199+
self,
200+
project: str,
201+
attachments: str,
202+
annotation_status: Optional[Any] = "NotStarted",
203203
):
204204
"""
205205
To attach image URLs to project use:
@@ -213,10 +213,10 @@ def attach_image_urls(
213213
sys.exit(0)
214214

215215
def attach_video_urls(
216-
self,
217-
project: str,
218-
attachments: str,
219-
annotation_status: Optional[Any] = "NotStarted",
216+
self,
217+
project: str,
218+
attachments: str,
219+
annotation_status: Optional[Any] = "NotStarted",
220220
):
221221
SAClient().attach_items(
222222
project=project,
@@ -227,7 +227,7 @@ def attach_video_urls(
227227

228228
@staticmethod
229229
def attach_document_urls(
230-
project: str, attachments: str, annotation_status: Optional[Any] = "NotStarted"
230+
project: str, attachments: str, annotation_status: Optional[Any] = "NotStarted"
231231
):
232232
SAClient().attach_items(
233233
project=project,
@@ -237,15 +237,15 @@ def attach_document_urls(
237237
sys.exit(0)
238238

239239
def upload_videos(
240-
self,
241-
project,
242-
folder,
243-
target_fps=None,
244-
recursive=False,
245-
extensions=constances.DEFAULT_VIDEO_EXTENSIONS,
246-
set_annotation_status=constances.AnnotationStatus.NOT_STARTED.name,
247-
start_time=0.0,
248-
end_time=None,
240+
self,
241+
project,
242+
folder,
243+
target_fps=None,
244+
recursive=False,
245+
extensions=constances.DEFAULT_VIDEO_EXTENSIONS,
246+
set_annotation_status=constances.AnnotationStatus.NOT_STARTED.name,
247+
start_time=0.0,
248+
end_time=None,
249249
):
250250
"""
251251
To upload videos from folder to project use

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ class Config:
3030

3131

3232
class DocumentEntity(BaseItemEntity):
33+
approval_status: Optional[ApprovalStatus] = Field(None)
34+
3335
class Config:
3436
extra = Extra.ignore
3537

src/superannotate/lib/core/service_types.py

Lines changed: 43 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from typing import Union
66

77
from lib.core import entities
8+
from lib.core.exceptions import AppException
89
from pydantic import BaseModel
910
from pydantic import Extra
1011
from pydantic import Field
@@ -90,13 +91,23 @@ class ServiceResponse(BaseModel):
9091
status: Optional[int]
9192
reason: Optional[str]
9293
content: Optional[Union[bytes, str]] = None
93-
data: Optional[Any] = None
94+
res_data: Optional[Any] = None # response data
95+
res_error: Optional[str] = None
9496
count: Optional[int] = 0
95-
_error: Optional[str] = None
9697

9798
class Config:
9899
extra = Extra.allow
99100

101+
@property
102+
def data(self):
103+
if self.error:
104+
raise AppException(self.error)
105+
return self.res_data
106+
107+
@data.setter
108+
def data(self, value):
109+
self.res_data = value
110+
100111
@property
101112
def status_code(self):
102113
return self.status
@@ -109,114 +120,115 @@ def ok(self):
109120

110121
@property
111122
def error(self):
112-
if self._error:
113-
return self._error
114-
return self.data
123+
if self.res_error:
124+
return self.res_error
125+
if not self.ok:
126+
return self.res_data
115127

116128
def set_error(self, value: Union[dict, str]):
117129
if isinstance(value, dict) and "error" in value:
118-
self._error = value["error"]
119-
self._error = value
130+
self.res_error = value["error"]
131+
self.res_error = value
120132

121133
def __str__(self):
122134
return f"Status: {self.status_code}, Error {self.error}"
123135

124136

125137
class ImageResponse(ServiceResponse):
126-
data: entities.ImageEntity = None
138+
res_data: entities.ImageEntity = None
127139

128140

129141
class VideoResponse(ServiceResponse):
130-
data: entities.VideoEntity = None
142+
res_data: entities.VideoEntity = None
131143

132144

133145
class DocumentResponse(ServiceResponse):
134-
data: entities.DocumentEntity = None
146+
res_data: entities.DocumentEntity = None
135147

136148

137149
class TiledResponse(ServiceResponse):
138-
data: entities.TiledEntity = None
150+
res_data: entities.TiledEntity = None
139151

140152

141153
class ClassificationResponse(ServiceResponse):
142-
data: entities.ClassificationEntity = None
154+
res_data: entities.ClassificationEntity = None
143155

144156

145157
class PointCloudResponse(ServiceResponse):
146-
data: entities.PointCloudEntity = None
158+
res_data: entities.PointCloudEntity = None
147159

148160

149161
class TeamResponse(ServiceResponse):
150-
data: entities.TeamEntity = None
162+
res_data: entities.TeamEntity = None
151163

152164

153165
class UserResponse(ServiceResponse):
154-
data: entities.UserEntity = None
166+
res_data: entities.UserEntity = None
155167

156168

157169
class ModelListResponse(ServiceResponse):
158-
data: List[entities.AnnotationClassEntity] = None
170+
res_data: List[entities.AnnotationClassEntity] = None
159171

160172

161173
class _IntegrationResponse(ServiceResponse):
162174
integrations: List[entities.IntegrationEntity] = []
163175

164176

165177
class IntegrationListResponse(ServiceResponse):
166-
data: _IntegrationResponse
178+
res_data: _IntegrationResponse
167179

168180

169181
class AnnotationClassListResponse(ServiceResponse):
170-
data: List[entities.AnnotationClassEntity] = None
182+
res_data: List[entities.AnnotationClassEntity] = None
171183

172184

173185
class SubsetListResponse(ServiceResponse):
174-
data: List[entities.SubSetEntity] = None
186+
res_data: List[entities.SubSetEntity] = None
175187

176188

177189
class SubsetResponse(ServiceResponse):
178-
data: entities.SubSetEntity = None
190+
res_data: entities.SubSetEntity = None
179191

180192

181193
class DownloadMLModelAuthDataResponse(ServiceResponse):
182-
data: DownloadMLModelAuthData = None
194+
res_data: DownloadMLModelAuthData = None
183195

184196

185197
class UploadAnnotationsResponse(ServiceResponse):
186-
data: Optional[UploadAnnotations] = None
198+
res_data: Optional[UploadAnnotations] = None
187199

188200

189201
class UploadAnnotationAuthDataResponse(ServiceResponse):
190-
data: UploadAnnotationAuthData = None
202+
res_data: UploadAnnotationAuthData = None
191203

192204

193205
class UploadCustomFieldValuesResponse(ServiceResponse):
194-
data: UploadCustomFieldValues = None
206+
res_data: UploadCustomFieldValues = None
195207

196208

197209
class UserLimitsResponse(ServiceResponse):
198-
data: UserLimits = None
210+
res_data: UserLimits = None
199211

200212

201213
class ItemListResponse(ServiceResponse):
202-
data: List[entities.BaseItemEntity] = None
214+
res_data: List[entities.BaseItemEntity] = None
203215

204216

205217
class FolderResponse(ServiceResponse):
206-
data: entities.FolderEntity = None
218+
res_data: entities.FolderEntity = None
207219

208220

209221
class FolderListResponse(ServiceResponse):
210-
data: List[entities.FolderEntity] = None
222+
res_data: List[entities.FolderEntity] = None
211223

212224

213225
class ProjectResponse(ServiceResponse):
214-
data: entities.ProjectEntity = None
226+
res_data: entities.ProjectEntity = None
215227

216228

217229
class ProjectListResponse(ServiceResponse):
218-
data: List[entities.ProjectEntity] = None
230+
res_data: List[entities.ProjectEntity] = None
219231

220232

221233
class SettingsListResponse(ServiceResponse):
222-
data: List[entities.SettingEntity] = None
234+
res_data: List[entities.SettingEntity] = None

0 commit comments

Comments
 (0)