116
116
NAME_KEY ,
117
117
ANNOTATIONS_KEY ,
118
118
AUTOTAGS_KEY ,
119
+ ANNOTATION_METADATA_SCHEMA_KEY ,
120
+ ITEM_METADATA_SCHEMA_KEY ,
121
+ FORCE_KEY ,
119
122
)
120
123
from .model import Model
121
124
from .errors import (
@@ -150,7 +153,16 @@ def list_models(self) -> List[Model]:
150
153
"""
151
154
model_objects = self ._make_request ({}, "models/" , requests .get )
152
155
153
- return [Model (model ["id" ], model ["name" ], model ["ref_id" ], model ["metadata" ], self ) for model in model_objects ["models" ]]
156
+ return [
157
+ Model (
158
+ model ["id" ],
159
+ model ["name" ],
160
+ model ["ref_id" ],
161
+ model ["metadata" ],
162
+ self ,
163
+ )
164
+ for model in model_objects ["models" ]
165
+ ]
154
166
155
167
def list_datasets (self ) -> Dict [str , Union [str , List [str ]]]:
156
168
"""
@@ -229,15 +241,28 @@ def create_dataset_from_project(
229
241
response = self ._make_request (payload , "dataset/create_from_project" )
230
242
return Dataset (response [DATASET_ID_KEY ], self )
231
243
232
- def create_dataset (self , name : str ) -> Dataset :
244
+ def create_dataset (
245
+ self ,
246
+ name : str ,
247
+ item_metadata_schema : Optional [Dict ] = None ,
248
+ annotation_metadata_schema : Optional [Dict ] = None ,
249
+ ) -> Dataset :
233
250
"""
234
- Creates a new dataset based on payload params:
235
- name -- A human-readable name of the dataset.
251
+ Creates a new dataset:
236
252
Returns a response with internal id and name for a new dataset.
237
- :param payload: { "name": str }
253
+ :param name -- A human-readable name of the dataset.
254
+ :param item_metadata_schema -- optional dictionary to define item metadata schema
255
+ :param annotation_metadata_schema -- optional dictionary to define annotation metadata schema
238
256
:return: new Dataset object
239
257
"""
240
- response = self ._make_request ({NAME_KEY : name }, "dataset/create" )
258
+ response = self ._make_request (
259
+ {
260
+ NAME_KEY : name ,
261
+ ANNOTATION_METADATA_SCHEMA_KEY : annotation_metadata_schema ,
262
+ ITEM_METADATA_SCHEMA_KEY : item_metadata_schema ,
263
+ },
264
+ "dataset/create" ,
265
+ )
241
266
return Dataset (response [DATASET_ID_KEY ], self )
242
267
243
268
def delete_dataset (self , dataset_id : str ) -> dict :
@@ -325,16 +350,16 @@ def populate_dataset(
325
350
async_responses : List [Any ] = []
326
351
327
352
for batch in tqdm_local_batches :
328
- payload = construct_append_payload (batch )
353
+ payload = construct_append_payload (batch , force )
329
354
responses = self ._process_append_requests_local (
330
- dataset_id , payload
355
+ dataset_id , payload , force
331
356
)
332
357
async_responses .extend (responses )
333
358
334
359
for batch in tqdm_remote_batches :
335
- payload = construct_append_payload (batch )
360
+ payload = construct_append_payload (batch , force )
336
361
responses = self ._process_append_requests (
337
- dataset_id , payload , batch_size , batch_size
362
+ dataset_id , payload , force , batch_size , batch_size
338
363
)
339
364
async_responses .extend (responses )
340
365
@@ -411,7 +436,6 @@ def close_files(request_items):
411
436
# don't forget to close all open files
412
437
for p in request_payloads :
413
438
close_files (p )
414
- # [close_files(p) for p in request_payloads]
415
439
416
440
# response object will be None if an error occurred
417
441
async_responses = [
@@ -428,6 +452,7 @@ def _process_append_requests(
428
452
self ,
429
453
dataset_id : str ,
430
454
payload : dict ,
455
+ update : bool ,
431
456
batch_size : int = 20 ,
432
457
size : int = 10 ,
433
458
):
@@ -446,7 +471,7 @@ def exception_handler(request, exception):
446
471
items = payload [ITEMS_KEY ]
447
472
payloads = [
448
473
# batch_size images per request
449
- {ITEMS_KEY : items [i : i + batch_size ]}
474
+ {ITEMS_KEY : items [i : i + batch_size ], FORCE_KEY : update }
450
475
for i in range (0 , len (items ), batch_size )
451
476
]
452
477
@@ -479,7 +504,7 @@ def annotate_dataset(
479
504
Union [BoxAnnotation , PolygonAnnotation , SegmentationAnnotation ]
480
505
],
481
506
update : bool ,
482
- batch_size : int = 100 ,
507
+ batch_size : int = 5000 ,
483
508
):
484
509
"""
485
510
Uploads ground truth annotations for a given dataset.
@@ -1009,7 +1034,7 @@ def _make_grequest(
1009
1034
1010
1035
def _make_request_raw (
1011
1036
self , payload : dict , route : str , requests_command = requests .post
1012
- ) -> dict :
1037
+ ):
1013
1038
"""
1014
1039
Makes a request to Nucleus endpoint. This method returns the raw
1015
1040
requests.Response object which is useful for unit testing.
@@ -1046,7 +1071,7 @@ def _make_request(
1046
1071
"""
1047
1072
response = self ._make_request_raw (payload , route , requests_command )
1048
1073
1049
- if response . status_code not in SUCCESS_STATUS_CODES :
1074
+ if getattr ( response , " status_code" ) not in SUCCESS_STATUS_CODES :
1050
1075
logger .warning (response )
1051
1076
1052
1077
return (
0 commit comments