44from labelbox .exceptions import ResourceNotFoundError
55
66from labelbox .orm import query
7- from labelbox .orm .db_object import DbObject , Updateable , BulkDeletable
7+ from labelbox .orm .db_object import DbObject , Updateable , BulkDeletable , experimental
88from labelbox .orm .model import Entity , Field , Relationship
99from labelbox .schema .data_row_metadata import DataRowMetadataField # type: ignore
1010from labelbox .schema .export_filters import DatarowExportFilters , build_filters , validate_at_least_one_of_data_row_ids_or_global_keys
1111from labelbox .schema .export_params import CatalogExportParams , validate_catalog_export_params
12+ from labelbox .schema .export_task import ExportTask
1213from labelbox .schema .task import Task
1314from labelbox .schema .user import User # type: ignore
1415
@@ -156,12 +157,54 @@ def create_attachment(self,
156157 return Entity .AssetAttachment (self .client ,
157158 res ["createDataRowAttachment" ])
158159
160+ @experimental
159161 @staticmethod
160- def export_v2 (client : 'Client' ,
161- data_rows : List [Union [str , 'DataRow' ]] = None ,
162- global_keys : List [str ] = None ,
163- task_name : Optional [str ] = None ,
164- params : Optional [CatalogExportParams ] = None ) -> Task :
162+ def export (
163+ client : "Client" ,
164+ data_rows : Optional [List [Union [str , "DataRow" ]]] = None ,
165+ global_keys : Optional [List [str ]] = None ,
166+ task_name : Optional [str ] = None ,
167+ params : Optional [CatalogExportParams ] = None ,
168+ ) -> ExportTask :
169+ """
170+ Creates a data rows export task with the given list, params and returns the task.
171+ Args:
172+ client (Client): client to use to make the export request
173+ data_rows (list of DataRow or str): list of data row objects or data row ids to export
174+ task_name (str): name of remote task
175+ params (CatalogExportParams): export params
176+
177+ >>> dataset = client.get_dataset(DATASET_ID)
178+ >>> task = DataRow.export(
179+ >>> data_rows=[data_row.uid for data_row in dataset.data_rows.list()],
180+ >>> # or a list of DataRow objects: data_rows = data_set.data_rows.list()
181+ >>> # or a list of global_keys=["global_key_1", "global_key_2"],
182+ >>> # Note that exactly one of: data_rows or global_keys parameters can be passed in at a time
183+ >>> # and if data rows ids is present, global keys will be ignored
184+ >>> params={
185+ >>> "performance_details": False,
186+ >>> "label_details": True
187+ >>> })
188+ >>> task.wait_till_done()
189+ >>> task.result
190+ """
191+ task = DataRow .export_v2 (client ,
192+ data_rows ,
193+ global_keys ,
194+ task_name ,
195+ params ,
196+ streamable = True )
197+ return ExportTask (task )
198+
199+ @staticmethod
200+ def export_v2 (
201+ client : "Client" ,
202+ data_rows : Optional [List [Union [str , "DataRow" ]]] = None ,
203+ global_keys : Optional [List [str ]] = None ,
204+ task_name : Optional [str ] = None ,
205+ params : Optional [CatalogExportParams ] = None ,
206+ streamable : bool = False ,
207+ ) -> Task :
165208 """
166209 Creates a data rows export task with the given list, params and returns the task.
167210 Args:
@@ -202,9 +245,10 @@ def export_v2(client: 'Client',
202245 validate_catalog_export_params (_params )
203246
204247 mutation_name = "exportDataRowsInCatalog"
205- create_task_query_str = """mutation exportDataRowsInCatalogPyApi($input: ExportDataRowsInCatalogInput!){
206- %s(input: $input) {taskId} }
207- """ % (mutation_name )
248+ create_task_query_str = (
249+ f"mutation { mutation_name } PyApi"
250+ f"($input: ExportDataRowsInCatalogInput!)"
251+ f"{{{ mutation_name } (input: $input){{taskId}}}}" )
208252
209253 data_row_ids = []
210254 if data_rows is not None :
@@ -227,7 +271,7 @@ def export_v2(client: 'Client',
227271 media_type_override = _params .get ('media_type_override' , None )
228272
229273 if task_name is None :
230- task_name = f"Export v2: data rows (%s)" % len (data_row_ids )
274+ task_name = f"Export v2: data rows { len (data_row_ids )} "
231275 query_params = {
232276 "input" : {
233277 "taskName" : task_name ,
@@ -260,6 +304,7 @@ def export_v2(client: 'Client',
260304 "modelRunIds" :
261305 _params .get ('model_run_ids' , None ),
262306 },
307+ "streamable" : streamable
263308 }
264309 }
265310
@@ -269,14 +314,4 @@ def export_v2(client: 'Client',
269314 print (res )
270315 res = res [mutation_name ]
271316 task_id = res ["taskId" ]
272- user : User = client .get_user ()
273- tasks : List [Task ] = list (
274- user .created_tasks (where = Entity .Task .uid == task_id ))
275- # Cache user in a private variable as the relationship can't be
276- # resolved due to server-side limitations (see Task.created_by)
277- # for more info.
278- if len (tasks ) != 1 :
279- raise ResourceNotFoundError (Entity .Task , task_id )
280- task : Task = tasks [0 ]
281- task ._user = user
282- return task
317+ return Task .get_task (client , task_id )
0 commit comments