in src/api/main.py [0:0]
def get_filtered_records(params: FilterParameters = Depends()):
results_atel = data_atel
results_gcn = data_gcn
if params.object_name:
items_before = len(results_atel) + len(results_gcn)
results_atel = match_object_name(params.object_name, results_atel)
results_gcn = match_object_name(params.object_name, results_gcn)
logger.info(f"object_name: filtered {items_before} items to {len(results_atel) + len(results_gcn)}")
if params.event_type:
items_before = len(results_atel) + len(results_gcn)
results_atel = {key: value for key, value in results_atel.items()
if params.event_type.lower() in results_atel[key].event_type}
results_gcn = {key: value for key, value in results_gcn.items()
if params.event_type.lower() in results_gcn[key].event_type}
logger.info(f"event_type: filtered {items_before} items to {len(results_atel) + len(results_gcn)}")
if params.object_type:
items_before = len(results_atel) + len(results_gcn)
results_atel = {key: value for key, value in results_atel.items()
if params.object_type.lower() in results_atel[key].object_type}
results_gcn = {key: value for key, value in results_gcn.items()
if params.object_type.lower() in results_gcn[key].object_type}
logger.info(f"object_type: filtered {items_before} items to {len(results_atel) + len(results_gcn)}")
if params.messenger_type:
items_before = len(results_atel) + len(results_gcn)
results_atel = {key: value for key, value in results_atel.items()
if params.messenger_type.lower() in results_atel[key].messenger_type}
results_gcn = {key: value for key, value in results_gcn.items()
if params.messenger_type.lower() in results_gcn[key].messenger_type}
logger.info(f"messenger_type: filtered {items_before} items to {len(results_atel) + len(results_gcn)}")
if params.coordinates:
if not params.radius:
raise HTTPException(status_code=400, detail="Radius is required when searching by coordinates.")
try:
sky_coord = SkyCoord(params.coordinates, frame='icrs', unit=(u.hour, u.deg))
except:
raise HTTPException(status_code=400,
detail=f"Invalid coordinates: {params.coordinates}. Please, use ICRS format.")
items_before = len(results_atel) + len(results_gcn)
results_atel = _search_by_coordinates(tree_atel, coords_atel, sky_coord, params.radius, results_atel)
results_gcn = _search_by_coordinates(tree_gcn, coords_gcn, sky_coord, params.radius, results_gcn)
logger.info(f"coordinates: filtered {items_before} items to {len(results_atel) + len(results_gcn)}")
return {'atel': results_atel, 'gcn': results_gcn}