@@ -64,7 +64,7 @@ class DeleteDataRowMetadata(_CamelCaseMixin):
6464
6565class DataRowMetadataBatchResponse (_CamelCaseMixin ):
6666 data_row_id : str
67- error : str
67+ error : Optional [ str ] = None
6868 fields : List [Union [DataRowMetadataField , SchemaId ]]
6969
7070
@@ -200,7 +200,7 @@ def parse_metadata(
200200 for dr in unparsed :
201201 fields = []
202202 for f in dr ["fields" ]:
203- schema = self .all_fields_id_index [f ["schema_id " ]]
203+ schema = self .all_fields_id_index [f ["schemaId " ]]
204204 if schema .kind == DataRowMetadataKind .enum :
205205 continue
206206 elif schema .kind == DataRowMetadataKind .option :
@@ -212,7 +212,7 @@ def parse_metadata(
212212
213213 fields .append (field )
214214 parsed .append (
215- DataRowMetadata (data_row_id = dr ["data_row_id " ], fields = fields ))
215+ DataRowMetadata (data_row_id = dr ["dataRowId " ], fields = fields ))
216216 return parsed
217217
218218 def bulk_upsert (
@@ -330,6 +330,44 @@ def _batch_delete(
330330 items ,
331331 batch_size = self ._batch_size )
332332
333+ def bulk_export (self , data_row_ids : List [str ]) -> List [DataRowMetadata ]:
334+ """ Exports metadata for a list of data rows
335+
336+ >>> mdo.bulk_export([data_row.uid for data_row in data_rows])
337+
338+ Args:
339+ data_row_ids: List of data data rows to fetch metadata for
340+ Returns:
341+ A list of DataRowMetadata.
342+ There will be one DataRowMetadata for each data_row_id passed in.
343+ This is true even if the data row does not have any meta data.
344+ Data rows without metadata will have empty `fields`.
345+
346+ """
347+
348+ if not len (data_row_ids ):
349+ raise ValueError ("Empty list passed" )
350+
351+ def _bulk_export (_data_row_ids : List [str ]) -> List [DataRowMetadata ]:
352+ query = """query dataRowCustomMetadataPyApi($dataRowIds: [ID!]!) {
353+ dataRowCustomMetadata(where: {dataRowIds : $dataRowIds}) {
354+ dataRowId
355+ fields {
356+ value
357+ schemaId
358+ }
359+ }
360+ }
361+ """
362+ return self .parse_metadata (
363+ self .client .execute (
364+ query ,
365+ {"dataRowIds" : _data_row_ids })['dataRowCustomMetadata' ])
366+
367+ return _batch_operations (_bulk_export ,
368+ data_row_ids ,
369+ batch_size = self ._batch_size )
370+
333371 def _parse_upsert (
334372 self , metadatum : DataRowMetadataField
335373 ) -> List [_UpsertDataRowMetadataInput ]:
0 commit comments