in granule_ingester/granule_ingester/writers/SolrStore.py [0:0]
def _build_solr_doc(self, tile: NexusTile) -> Dict:
summary: TileSummary = tile.summary
bbox: TileSummary.BBox = summary.bbox
stats: TileSummary.DataStats = summary.stats
min_time = datetime.strftime(datetime.utcfromtimestamp(stats.min_time), self.iso)
max_time = datetime.strftime(datetime.utcfromtimestamp(stats.max_time), self.iso)
day_of_year = datetime.utcfromtimestamp(stats.min_time).timetuple().tm_yday
geo = self.determine_geo(bbox)
granule_file_name: str = Path(summary.granule).name # get base filename
tile_type = tile.tile.WhichOneof("tile_type")
tile_data = getattr(tile.tile, tile_type)
var_names = json.loads(summary.data_var_name)
standard_names = []
if summary.standard_name:
standard_names = json.loads(summary.standard_name)
if not isinstance(var_names, list):
var_names = [var_names]
if not isinstance(standard_names, list):
standard_names = [standard_names]
input_document = {
'table_s': self.TABLE_NAME,
'geo': geo,
'id': summary.tile_id,
'solr_id_s': '{ds_name}!{tile_id}'.format(ds_name=summary.dataset_name, tile_id=summary.tile_id),
'sectionSpec_s': summary.section_spec,
'dataset_s': summary.dataset_name,
'granule_s': granule_file_name,
'tile_var_name_ss': var_names,
'day_of_year_i': day_of_year,
'tile_min_lon': bbox.lon_min,
'tile_max_lon': bbox.lon_max,
'tile_min_lat': bbox.lat_min,
'tile_max_lat': bbox.lat_max,
'tile_min_elevation_d': tile_data.min_elevation,
'tile_max_elevation_d': tile_data.max_elevation,
'tile_min_time_dt': min_time,
'tile_max_time_dt': max_time,
'tile_min_val_d': stats.min,
'tile_max_val_d': stats.max,
'tile_avg_val_d': stats.mean,
'tile_count_i': int(stats.count)
}
for var_name, standard_name in zip(var_names, standard_names):
if standard_name:
input_document[f'{var_name}.tile_standard_name_s'] = standard_name
ecco_tile_id = getattr(tile_data, 'tile', None)
if ecco_tile_id:
input_document['ecco_tile'] = ecco_tile_id
for attribute in summary.global_attributes:
input_document[attribute.getName()] = attribute.getValues(
0) if attribute.getValuesCount() == 1 else attribute.getValuesList()
return input_document