import click
from click import echo
from click import pause
from click import prompt
from . import util
[docs]@click.option(
"--name",
"-n",
default=None,
type=str,
show_default=True,
help="Name of the datagroup to export.",
)
@click.option(
"--select",
"-s",
default=None,
type=(str, util.VALORRANGEORLIST),
show_default=True,
multiple=True,
help="Selection of data. Example --select DIMENSION_NAME VALUE "
"where VALUE can be a scalar, a list like '[V1,V2,V3]' or a tuple like '(MIN,MAX)'",
)
@click.option(
"--out",
"-o",
default=None,
type=click.Path(dir_okay=False),
show_default=True,
help="Path to the output file.",
)
@click.argument("filename", type=click.Path(exists=True))
def export(filename: str, select, out: str, name: str):
"""Exports data from netCDF4 to ascii."""
echo(f"Opening dataset at {filename}")
dataset = util.load_dataset(filename, dtype="nc")
if name is None:
name = util.select_name(filename, dataset)
stop = False
data = dataset[name]
for sel in select:
data = util.select_data(data, sel[0], sel[1])
if out is not None:
if len(data.shape) > 2:
pause("Cannot export data with more than 2 dimensions to ASCII")
else:
util.write_data(data, out)
stop = True
while not stop:
echo(f"Selected dataset '{name}'.")
echo(f"\nDataset Content\n\n{data}\n")
choice = prompt(
"How to proceed",
default="exit",
type=click.Choice(["exit", "save", "select", "change", "help"]),
)
if choice == "exit":
stop = True
elif choice == "change":
name = util.select_name(filename, dataset)
data = dataset[name]
elif choice == "select":
cont = True
while cont:
dims = [d for d in data.dims]
choice = prompt(
"Please select a dimension or action",
default="back",
type=click.Choice(dims + ["reset", "back"]),
)
if choice == "back":
cont = False
elif choice == "reset":
data = dataset[name]
else:
dim = choice
choice = prompt(
"Please select a value. Type 2 values sperated by ',' to select a range.",
default="back",
type=util.VALORRANGEORLIST,
)
if choice != "back":
try:
data = util.select_data(data, dim, choice)
except ValueError as e:
echo(e, err=True)
continue
elif choice == "save":
if len(data.shape) > 2:
pause("Cannot export data with more than 2 dimensions to ASCII")
else:
cont = True
change = False
while cont:
if out is None or change:
out = prompt(
"Please type in a name for the output file.",
default="out.csv",
type=click.Path(dir_okay=False),
)
change = False
choice = prompt(
f"The filepath of the output file is '{out}'. Save the data?",
default="yes",
type=click.Choice(["yes", "no", "change"]),
)
if choice == "change":
change = True
else:
cont = False
if choice == "yes":
util.write_data(data, out)
echo("Good-bye, have a nice day!")