Source code for svo

import io
import os
import sys
import requests
from astropy.io.votable import parse
import rich

import ska


[docs]def download_filter_list(): """Retrieve the list of filter IDs from `SVO Filter Service <http://svo2.cab.inta-csic.es/theory/fps`__ Returns ======= list The list of filter IDS """ try: # Main SVO filter list r = requests.get( "https://svo.cab.inta-csic.es/wp-content/uploads/download/FPS_info.xml" ) SVOFilters = parse(io.BytesIO(r.content)) main_id = SVOFilters.get_first_table().to_table().to_pandas().filterID.to_list() # Secondary SVO filter list r = requests.get( "https://svo.cab.inta-csic.es/wp-content/uploads/download/others.xml" ) SVOFilters = parse(io.BytesIO(r.content)) other_id = SVOFilters.get_first_table().to_table().to_pandas()["__ID"].to_list() # Merge and Write to disk filter_id = main_id + other_id with open(ska.PATH_FILTER_LIST, "w") as file: for f in filter_id: file.write(f"{f}\n") return True except: # raise Exception("Error downloading filter list") rich.print(f"[red]Error downloading filter {id} VOTable[/red].") return False
[docs]def load_filter_list(): """Read all filter IDs from a cache list Returns ======= list The list of filter IDS """ if not os.path.isfile(ska.PATH_FILTER_LIST): download_filter_list() with open(ska.PATH_FILTER_LIST, "r") as file: FILTERS = [filt.strip() for filt in file] return FILTERS
[docs]def download_filter(id, force=False): """Download a filter VOTable from `SVO Filter Service <http://svo2.cab.inta-csic.es/theory/fps/index.php?mode=voservice>`__ Parameters ========== id : str The unique SVO filter identifier to be downloaded force : bool If True, the filter VOTable will be downloaded even if it is already cached Returns ======= str The path to the filter VOTable file """ # Test if the filter ID is valid FILTERS = load_filter_list() if id not in FILTERS: rich.print( f"[red]Unknown filter ID {id}[/red]. Use [green]ska id[/green] to list available filters" ) sys.exit(1) # SVO Base URL for queries url = f"http://svo2.cab.inta-csic.es/theory/fps3/fps.php?" # Output name for the filter VOTable out = os.path.join(ska.PATH_CACHE, id.replace("/", "_") + ".xml") # Download VOTable if (not os.path.isfile(out)) or force: try: # Request the filter VOTable r = requests.get(url, params={"ID": id}) SVOFilter = parse(io.BytesIO(r.content)) filter_info = SVOFilter.get_first_table() # Write it to disk # os.makedirs(ska.PATH_CACHE, exist_ok=True) SVOFilter.to_xml(out) except: rich.print(f"[red]Error downloading filter {id} VOTable[/red].") sys.exit(1) # raise Exception("Error downloading filter VOTable") # Return path to filter VOTable return out