def chunk(cube, output, format=None, params=None, chunks=None): """ (Re-)chunk xcube dataset. Changes the external chunking of all variables of CUBE according to CHUNKS and writes the result to OUTPUT. """ chunk_sizes = None if chunks: chunk_sizes = parse_cli_kwargs(chunks, metavar="CHUNKS") for k, v in chunk_sizes.items(): if not isinstance(v, int) or v <= 0: raise click.ClickException("Invalid value for CHUNKS, " f"chunk sizes must be positive integers: {chunks}") write_kwargs = dict() if params: write_kwargs = parse_cli_kwargs(params, metavar="PARAMS") from xcube.util.dsio import guess_dataset_format format_name = format if format else guess_dataset_format(output) from xcube.api import open_dataset, chunk_dataset, write_dataset with open_dataset(input_path=cube) as ds: if chunk_sizes: for k in chunk_sizes: if k not in ds.dims: raise click.ClickException("Invalid value for CHUNKS, " f"{k!r} is not the name of any dimension: {chunks}") chunked_dataset = chunk_dataset(ds, chunk_sizes=chunk_sizes, format_name=format_name) write_dataset(chunked_dataset, output_path=output, format_name=format_name, **write_kwargs)
def vars2dim(cube, var_name, dim_name, output=None, format=None): """ Convert cube variables into new dimension. Moves all variables of <cube> into into a single new variable <var-name> with a new dimension <dim-name> and writes the results to <output>. """ from xcube.util.dsio import guess_dataset_format from xcube.api import open_dataset, vars_to_dim, write_dataset import os if not output: dirname = os.path.dirname(cube) basename = os.path.basename(cube) basename, ext = os.path.splitext(basename) output = os.path.join(dirname, basename + '-vars2dim' + ext) format_name = format if format else guess_dataset_format(output) with open_dataset(input_path=cube) as ds: converted_dataset = vars_to_dim(ds, dim_name=dim_name, var_name=var_name) write_dataset(converted_dataset, output_path=output, format_name=format_name)
def dump(input, variable, encoding): """ Dump contents of an input dataset. """ from xcube.api import open_dataset, dump_dataset with open_dataset(input) as ds: text = dump_dataset(ds, var_names=variable, show_var_encoding=encoding) print(text)
def _verify(input_path: str = None, monitor=None): from xcube.api import open_dataset, verify_cube monitor(f'Opening cube from {input_path!r}...') with open_dataset(input_path) as cube: report = verify_cube(cube) if not report: monitor("INPUT is a valid cube.") return monitor('INPUT is not a valid cube due to the following reasons:') monitor('- ' + '\n- '.join(report)) # According to http://tldp.org/LDP/abs/html/exitcodes.html, exit code 3 is not reserved sys.exit(3)