Coverage for /usr/local/lib/python3.11/dist-packages/pyrocko/squirrel/tool/cli.py: 92%
12 statements
« prev ^ index » next coverage.py v6.5.0, created at 2023-10-04 09:52 +0000
« prev ^ index » next coverage.py v6.5.0, created at 2023-10-04 09:52 +0000
1# http://pyrocko.org - GPLv3
2#
3# The Pyrocko Developers, 21st Century
4# ---|P------/S----------~Lg----------
6'''
7Squirrel command line tool main program.
8'''
10import logging
12from . import common
13from .commands import command_modules
16logger = logging.getLogger('psq.cli')
19g_program_name = 'squirrel'
22def main(args=None):
23 run(
24 args=args,
25 prog=g_program_name,
26 subcommands=command_modules,
27 description='''
28Pyrocko Squirrel - Prompt seismological data access with a fluffy tail.
30This is ```squirrel```, a command-line front-end to the Squirrel data access
31infrastructure. The Squirrel infrastructure offers meta-data caching, blazingly
32fast data lookup for large datasets and transparent online data download to
33applications building on it.
35In most cases, the Squirrel does its business discretely under the hood and
36does not require human interaction or awareness. However, using this tool, some
37aspects can be configured for the benefit of greater performance or
38convenience, including (1) using a separate (isolated, local) environment for a
39specific project, (2) using named selections to speed up access to very large
40datasets, (3), pre-scanning/indexing of file collections. It can also be used
41to inspect various aspects of a data collection.
43This tool's functionality is available through several subcommands. Run
44```squirrel SUBCOMMAND --help``` to get further help.''')
47def run(
48 args=None,
49 command=None,
50 subcommands=[],
51 description='''
52Pyrocko Squirrel based script.
54Run with --help to get further help.''',
55 **kwargs):
57 '''
58 Setup and run Squirrel-based application.
60 The implementation of the tool can be provided by one or multiple
61 :py:class:`~pyrocko.squirrel.tool.common.SquirrelCommand` instances. This
62 driver function sets up a
63 :py:class:`~pyrocko.squirrel.tool.common.SquirrelArgumentParser`, and
64 processes command line arguments, and dispatches execution to the selected
65 command or subcommand. The program is set up to provide and automatically
66 handle ``--help``, ``--loglevel``, and ``--progress``. If an exception of
67 type :py:exc:`pyrocko.squirrel.error.SquirrelError` or
68 :py:exc:`pyrocko.squirrel.error.ToolError` is caught, the error is logged
69 and the program is terminated with exit code 1.
71 :param args:
72 Arguments passed to
73 :py:meth:`~pyrocko.squirrel.tool.common.SquirrelArgumentParser.parse_args`.
74 By default uses py:attr:`sys.argv`.
75 :type args:
76 :py:class:`list` of :py:class:`str`
78 :param command:
79 Implementation of the command. It must provide ``setup(parser)`` and
80 ``run(parser, args)``.
81 :type command:
82 :py:class:`~pyrocko.squirrel.tool.common.SquirrelCommand` or module
84 :param subcommands:
85 Configures the program to offer multiple subcommands. The command to
86 execute is selected with the first argument passed to ``args``.
87 Implementations must provide ``make_subparser(subparsers)``,
88 ``setup(parser)``, and ``run(parser, args)``.
89 :type subcommands:
90 :py:class:`list` of
91 :py:class:`~pyrocko.squirrel.tool.common.SquirrelCommand` instances or
92 modules
94 :param description:
95 Description of the program.
96 :type description:
97 str
98 '''
100 parser = common.SquirrelArgumentParser(
101 command=command,
102 subcommands=subcommands,
103 description=description, **kwargs)
105 return parser.run(args)
108__all__ = [
109 'main',
110 'run',
111]