1515from labelbox .exceptions import InvalidQueryError , LabelboxError , ResourceNotFoundError , InvalidAttributeError
1616from labelbox .orm .db_object import DbObject , Updateable , Deletable
1717from labelbox .orm .model import Entity , Field , Relationship
18+ from labelbox .schema .data_row_metadata import DataRowMetadataField
1819
1920if TYPE_CHECKING :
2021 from labelbox import Task , User , DataRow
@@ -256,17 +257,32 @@ def validate_attachments(item):
256257 )
257258 return attachments
258259
260+ def convert_metadata_field (metadata_field ):
261+ if isinstance (metadata_field , DataRowMetadataField ):
262+ return metadata_field
263+ elif isinstance (metadata_field , dict ):
264+ if not all (key in metadata_field for key in ("schema_id" , "value" )):
265+ raise ValueError (f"Custom metadata fields must have 'schema_id' and 'value' keys" )
266+ return DataRowMetadataField (schema_id = metadata_field ["schema_id" ], value = metadata_field ["value" ])
267+ else :
268+ raise ValueError (f"Metadata field is neither 'DataRowMetadataField' type or a dictionary!" )
269+
259270 def parse_metadata_fields (item ):
260- metadata_fields = item .get ('metadata_fields ' )
271+ metadata_fields = item .get ('custom_metadata ' )
261272 if metadata_fields :
273+ # Convert all metadata fields to DataRowMetadataField type
274+ metadata_fields = [
275+ convert_metadata_field (m )
276+ for m in metadata_fields
277+ ]
262278 mdo = self .client .get_data_row_metadata_ontology ()
263279 metadata = list (
264280 chain .from_iterable (
265281 mdo .parse_upsert (m ) for m in metadata_fields ))
266282 metadata_fields = [
267283 md .dict (by_alias = True ) for md in metadata
268284 ]
269- item ['metadata_fields ' ] = metadata_fields
285+ item ['custom_metadata ' ] = metadata_fields
270286
271287 def format_row (item ):
272288 # Formats user input into a consistent dict structure
@@ -308,9 +324,8 @@ def convert_item(item):
308324 validate_keys (item )
309325 # Make sure attachments are valid
310326 validate_attachments (item )
311- print ( f"!! Before parsing metadata field: { item } " )
327+ # Parse metadata fields if they exist
312328 parse_metadata_fields (item )
313- print (f"!! After parsing metadata field: { item } " )
314329 # Upload any local file paths
315330 item = upload_if_necessary (item )
316331
@@ -329,7 +344,7 @@ def convert_item(item):
329344 items = [future .result () for future in as_completed (futures )]
330345 # Prepare and upload the desciptor file
331346 data = json .dumps (items )
332- print (f"!! input data: { data } " )
347+ # print(f"!! input data: {data}")
333348 return self .client .upload_data (data )
334349
335350 def data_rows_for_external_id (self ,
0 commit comments