Source code for majis.opl.export

"""OPL generic export module."""

from pathlib import Path

from planetary_coverage.events import EventsDict, EventsList, EventWindow

from ..itl.export import save_itl_json
from ..misc import fmt_datetime
from ..misc.events import flatten_events
from ..misc.export import save_file


[docs] def save_opl( fout: str | Path | None, *events: EventsList | EventsDict, overlap: bool = False, **kwargs, ) -> Path: """Save OPL events to a new OPL file. Note ---- By default, OPL blocks must not overlap each other. This can be disable with ``overlap=True``. """ ext = Path(fout).suffix match ext: case '.csv': return save_opl_csv( fout, *events, overlap=overlap, **kwargs, ) case '.json': return save_opl_json( fout, *events, overlap=overlap, **kwargs, ) case _: raise NotImplementedError
@flatten_events def save_opl_csv( fout: str | Path | None, *events: EventsList | EventsDict, overlap: bool = False, sep: str = ',', ) -> Path: """Export OPL file in CSV format.""" content = [sep.join(fmt_opl_csv(event)) for event in events] return save_file(fout, content, suffix='.csv')
[docs] def fmt_opl_csv(obs: EventWindow) -> list[str]: """OPL CSV line formatter. Warning ------- Currently the OPL CSV don't have an explicit header. Here we assume that the header is as follow" # key, start, end, obs_key, instrument The initial ``key`` is composed of the following parameters: <instrument>_<observation_type>_<type> """ return [ '_'.join( [ obs['INSTRUMENT'], obs['OBSERVATION_TYPE'], obs['TYPE'], ] ), fmt_datetime(obs.start), fmt_datetime(obs.stop), obs['OBS_KEY'], obs['INSTRUMENT'], ]
[docs] def save_opl_json( fout: str | Path | None, *events: EventsList | EventsDict, overlap: bool = False, ) -> Path: """Export OPL file in JSON format. Note ---- Re-use ITL JSON export with OPL schema instead. """ return save_itl_json(fout, *events, overlap=overlap, fmt='OPL')