""" 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 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_commands"), 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)