Source code for planetary_coverage.events.file

"""Generic Events file reader module."""

from pathlib import Path

from .csv import CsvEventsFile
from .evf import EvfEventsFile
from .itl import ItlEventsFile
from .orb import OrbitEventsFile


[docs]def read_events(fname, **kwargs): """Read events file. Parameters ---------- fname: str or pathlib.Path File name to parse **kwargs: Parsing properties. Returns ------- CsvEventFile, EvfEventFile, ItlEventFile or OrbitEventsFile Parsed events list from the provided file. Raises ------ FileNotFoundError If the filename provided does not exist. IOError When it's not possible to parse the provided file. Note ---- The function will try to guess the layout of the file based on the filename extension. See Also -------- planetary_coverage.events.CsvEventsFile planetary_coverage.events.EvfEventsFile planetary_coverage.events.ItlEventsFile planetary_coverage.events.OrbitEventsFile """ fname = Path(fname) if not fname.exists(): raise FileNotFoundError(fname) ext = fname.suffix.lower() if ext == '.orb': return OrbitEventsFile(fname) if ext == '.evf': return EvfEventsFile(fname) if ext == '.itl': return ItlEventsFile(fname, evf=kwargs.get('evf')) if kwargs: return CsvEventsFile(fname, **kwargs) csv_kwargs = [ {'primary_key': 'Name'}, # mission_phases.csv {'primary_key': 'Event Name'}, # mission_timeline.csv { # mission_events.csv 'primary_key': 'name', 'header': '# name, t_start, t_end, subgroup, working_group', } ] for kwargs in csv_kwargs: try: return CsvEventsFile(fname, **kwargs) except (KeyError, ValueError, IOError): pass raise IOError(f'Impossible to parse the events in: {fname}')