Repository URL to install this package:
Version:
1.10.1 ▾
|
"""
Main click group for the CLI. Needs to be isolated for entry-point loading.
"""
import itertools
import logging
import sys
import click
from click_plugins import with_plugins
from cligj import verbose_opt, quiet_opt
if sys.version_info < (3, 10):
from importlib_metadata import entry_points
else:
from importlib.metadata import entry_points
import fiona
from fiona import __version__ as fio_version
from fiona.session import AWSSession, DummySession
from fiona.fio.bounds import bounds
from fiona.fio.calc import calc
from fiona.fio.cat import cat
from fiona.fio.collect import collect
from fiona.fio.distrib import distrib
from fiona.fio.dump import dump
from fiona.fio.env import env
from fiona.fio.info import info
from fiona.fio.insp import insp
from fiona.fio.load import load
from fiona.fio.ls import ls
from fiona.fio.rm import rm
# The "calc" extras require pyparsing and shapely.
try:
import pyparsing
import shapely
from fiona.fio.features import filter_cmd, map_cmd, reduce_cmd
supports_calc = True
except ImportError:
supports_calc = False
def configure_logging(verbosity):
log_level = max(10, 30 - 10 * verbosity)
logging.basicConfig(stream=sys.stderr, level=log_level)
@with_plugins(
itertools.chain(
entry_points(group="fiona.fio_plugins"),
)
)
@click.group()
@verbose_opt
@quiet_opt
@click.option(
"--aws-profile",
help="Select a profile from the AWS credentials file")
@click.option(
"--aws-no-sign-requests",
is_flag=True,
help="Make requests anonymously")
@click.option(
"--aws-requester-pays",
is_flag=True,
help="Requester pays data transfer costs")
@click.version_option(fio_version)
@click.version_option(fiona.__gdal_version__, '--gdal-version',
prog_name='GDAL')
@click.version_option(sys.version, '--python-version', prog_name='Python')
@click.pass_context
def main_group(
ctx, verbose, quiet, aws_profile, aws_no_sign_requests,
aws_requester_pays):
"""Fiona command line interface.
"""
verbosity = verbose - quiet
configure_logging(verbosity)
ctx.obj = {}
ctx.obj["verbosity"] = verbosity
ctx.obj["aws_profile"] = aws_profile
envopts = {"CPL_DEBUG": (verbosity > 2)}
if aws_profile or aws_no_sign_requests:
session = AWSSession(
profile_name=aws_profile,
aws_unsigned=aws_no_sign_requests,
requester_pays=aws_requester_pays,
)
else:
session = DummySession()
ctx.obj["env"] = fiona.Env(session=session, **envopts)
main_group.add_command(bounds)
main_group.add_command(calc)
main_group.add_command(cat)
main_group.add_command(collect)
main_group.add_command(distrib)
main_group.add_command(dump)
main_group.add_command(env)
main_group.add_command(info)
main_group.add_command(insp)
main_group.add_command(load)
main_group.add_command(ls)
main_group.add_command(rm)
if supports_calc:
main_group.add_command(map_cmd)
main_group.add_command(filter_cmd)
main_group.add_command(reduce_cmd)