def RDFValueToBigQuerySchema(self, value):
    """Convert Exported* rdfvalue into a BigQuery schema."""
    fields_array = []
    for type_info in value.__class__.type_infos:
      # Nested structures are indicated by setting type "RECORD"
      if type_info.__class__.__name__ == "ProtoEmbedded":
        fields_array.append({
            "name": type_info.name,
            "type": "RECORD",
            "description": type_info.description,
            "fields": self.RDFValueToBigQuerySchema(value.Get(type_info.name))
        })
      else:
        # If we don't have a specific map use string.
        bq_type = self.RDF_BIGQUERY_TYPE_MAP.get(type_info.proto_type_name,
                                                 None) or "STRING"

        # For protos with RDF types we need to do some more checking to properly
        # covert types.
        if hasattr(type_info, "original_proto_type_name"):
          if type_info.original_proto_type_name in [
              "RDFDatetime", "RDFDatetimeSeconds"
          ]:
            bq_type = "TIMESTAMP"
          elif type_info.proto_type_name == "uint64":
            # This is to catch fields like st_mode which are stored as ints but
            # exported as more useful strings. Things which are just plain ints
            # won't have an RDF type specified and so will be exported as
            # INTEGER
            bq_type = "STRING"

        fields_array.append({
            "name": type_info.name,
            "type": bq_type,
            "description": type_info.description
        })
    return fields_array
def RDFValueToBigQuerySchema ( self , value ) : fields_array = [ ] for type_info in value . __class__ . type_infos : if type_info . __class__ . __name__ == "ProtoEmbedded" : fields_array . append ( { "name" : type_info . name , "type" : "RECORD" , "description" : type_info . description , "fields" : self . RDFValueToBigQuerySchema ( value . Get ( type_info . name ) ) } ) else : bq_type = self . RDF_BIGQUERY_TYPE_MAP . get ( type_info . proto_type_name , None ) or "STRING" if hasattr ( type_info , "original_proto_type_name" ) : if type_info . original_proto_type_name in [ "RDFDatetime" , "RDFDatetimeSeconds" ] : bq_type = "TIMESTAMP" elif type_info . proto_type_name == "uint64" : bq_type = "STRING" fields_array . append ( { "name" : type_info . name , "type" : bq_type , "description" : type_info . description } ) return fields_array
Convert Exported* rdfvalue into a BigQuery schema.