Source code for pyrocko.squirrel.tool.cli

# http://pyrocko.org - GPLv3
#
# The Pyrocko Developers, 21st Century
# ---|P------/S----------~Lg----------

'''
Squirrel command line tool main program.
'''

import logging

from . import common
from .commands import command_modules


logger = logging.getLogger('psq.cli')


g_program_name = 'squirrel'


def main(args=None):
    run(
        args=args,
        prog=g_program_name,
        subcommands=command_modules,
        description='''
Pyrocko Squirrel - Prompt seismological data access with a fluffy tail.

This is ```squirrel```, a command-line front-end to the Squirrel data access
infrastructure. The Squirrel infrastructure offers meta-data caching, blazingly
fast data lookup for large datasets and transparent online data download to
applications building on it.

In most cases, the Squirrel does its business discretely under the hood and
does not require human interaction or awareness. However, using this tool, some
aspects can be configured for the benefit of greater performance or
convenience, including (1) using a separate (isolated, local) environment for a
specific project, (2) using named selections to speed up access to very large
datasets, (3), pre-scanning/indexing of file collections. It can also be used
to inspect various aspects of a data collection.

This tool's functionality is available through several subcommands. Run
```squirrel SUBCOMMAND --help``` to get further help.''')


[docs]def run( args=None, command=None, subcommands=[], description=''' Pyrocko Squirrel based script. Run with --help to get further help.''', **kwargs): ''' Setup and run Squirrel-based application. The implementation of the tool can be provided by one or multiple :py:class:`~pyrocko.squirrel.tool.common.SquirrelCommand` instances. This driver function sets up a :py:class:`~pyrocko.squirrel.tool.common.SquirrelArgumentParser`, and processes command line arguments, and dispatches execution to the selected command or subcommand. The program is set up to provide and automatically handle ``--help``, ``--loglevel``, and ``--progress``. If an exception of type :py:exc:`pyrocko.squirrel.error.SquirrelError` or :py:exc:`pyrocko.squirrel.error.ToolError` is caught, the error is logged and the program is terminated with exit code 1. :param args: Arguments passed to :py:meth:`~pyrocko.squirrel.tool.common.SquirrelArgumentParser.parse_args`. By default uses py:attr:`sys.argv`. :type args: :py:class:`list` of :py:class:`str` :param command: Implementation of the command. It must provide ``setup(parser)`` and ``run(parser, args)``. :type command: :py:class:`~pyrocko.squirrel.tool.common.SquirrelCommand` or module :param subcommands: Configures the program to offer multiple subcommands. The command to execute is selected with the first argument passed to ``args``. Implementations must provide ``make_subparser(subparsers)``, ``setup(parser)``, and ``run(parser, args)``. :type subcommands: :py:class:`list` of :py:class:`~pyrocko.squirrel.tool.common.SquirrelCommand` instances or modules :param description: Description of the program. :type description: str ''' parser = common.SquirrelArgumentParser( command=command, subcommands=subcommands, description=description, **kwargs) return parser.run(args)
__all__ = [ 'main', 'run', ]