Repository URL to install this package:
|
Version:
1.10.1 ▾
|
"""Common commandline options for `fio`"""
from collections import defaultdict
import click
src_crs_opt = click.option('--src-crs', '--src_crs', help="Source CRS.")
dst_crs_opt = click.option('--dst-crs', '--dst_crs', help="Destination CRS.")
def cb_layer(ctx, param, value):
"""Let --layer be a name or index."""
if value is None or not value.isdigit():
return value
else:
return int(value)
def cb_multilayer(ctx, param, value):
"""
Transform layer options from strings ("1:a,1:b", "2:a,2:c,2:z") to
{
'1': ['a', 'b'],
'2': ['a', 'c', 'z']
}
"""
out = defaultdict(list)
for raw in value:
for v in raw.split(','):
ds, name = v.split(':')
out[ds].append(name)
return out
def cb_key_val(ctx, param, value):
"""
click callback to validate `--opt KEY1=VAL1 --opt KEY2=VAL2` and collect
in a dictionary like the one below, which is what the CLI function receives.
If no value or `None` is received then an empty dictionary is returned.
{
'KEY1': 'VAL1',
'KEY2': 'VAL2'
}
Note: `==VAL` breaks this as `str.split('=', 1)` is used.
"""
if not value:
return {}
else:
out = {}
for pair in value:
if "=" not in pair:
raise click.BadParameter(
f"Invalid syntax for KEY=VAL arg: {pair}"
)
else:
k, v = pair.split("=", 1)
k = k.lower()
v = v.lower()
out[k] = None if v.lower() in ["none", "null", "nil", "nada"] else v
return out
def validate_multilayer_file_index(files, layerdict):
"""
Ensure file indexes provided in the --layer option are valid
"""
for key in layerdict.keys():
if key not in [str(k) for k in range(1, len(files) + 1)]:
layer = key + ":" + layerdict[key][0]
raise click.BadParameter(f"Layer {layer} does not exist")
creation_opt = click.option(
"--co",
"--profile",
"creation_options",
metavar="NAME=VALUE",
multiple=True,
callback=cb_key_val,
help="Driver specific creation options. See the documentation for the selected output driver for more information.",
)
open_opt = click.option(
"--oo",
"open_options",
metavar="NAME=VALUE",
multiple=True,
callback=cb_key_val,
help="Driver specific open options. See the documentation for the selected output driver for more information.",
)