Source code for revrt.utilities.cli
"""revrt utilities command line interface (CLI)"""
from pathlib import Path
from gaps.cli import CLICommandFromClass, CLICommandFromFunction
from revrt.utilities.handlers import LayeredFile
[docs]
def layers_from_file(fp, _out_layer_dir, layers=None, profile_kwargs=None):
"""Extract layers from a layered file on disk
Parameters
----------
fp : path-like
Path to layered file on disk.
layers : list, optional
List of layer names to extract. Layer names must match layers in
the `fp`, otherwise an error will be raised. If ``None``,
extracts all layers from the :class:`LayeredFile`.
By default, ``None``.
profile_kwargs : dict, optional
Additional keyword arguments to pass into writing each raster.
The following attributes ar ignored (they are set using
properties of the source :class:`LayeredFile`):
- nodata
- transform
- crs
- count
- width
- height
By default, ``None``.
Returns
-------
list
List of paths to the GeoTIFF files that were created.
"""
# TODO: Add dask client here??
out_layer_dir = Path(_out_layer_dir)
out_layer_dir.mkdir(parents=True, exist_ok=True)
profile_kwargs = profile_kwargs or {}
if layers is not None:
layers = {layer: out_layer_dir / f"{layer}.tif" for layer in layers}
LayeredFile(fp).extract_layers(layers, **profile_kwargs)
else:
layers = LayeredFile(fp).extract_all_layers(
out_layer_dir, **profile_kwargs
)
return [str(layer_fp) for layer_fp in layers.values()]
def _preprocess_layers_from_file_config(config, out_dir, out_layer_dir=None):
"""Preprocess user config
Parameters
----------
config : dict
User configuration parsed as (nested) dict.
out_dir : path-like
Output directory as suggested by GAPs (typically the config
directory).
out_layer_dir : path-like, optional
Path to output directory into which layers should be saved as
GeoTIFFs. This directory will be created if it does not already
exist. If not provided, will use the config directory as output.
By default, ``None``.
"""
config["_out_layer_dir"] = str(out_layer_dir or out_dir)
return config
layers_to_file_command = CLICommandFromClass(
LayeredFile, method="layers_to_file", add_collect=False
)
layers_from_file_command = CLICommandFromFunction(
function=layers_from_file,
add_collect=False,
config_preprocessor=_preprocess_layers_from_file_config,
)