1# http://pyrocko.org - GPLv3
2#
3# The Pyrocko Developers, 21st Century
4# ---|P------/S----------~Lg----------
6import sys
7import logging
9from . import common
10from .commands import command_modules
11from pyrocko import squirrel as sq
14logger = logging.getLogger('psq.cli')
17g_program_name = 'squirrel'
20def main(args=None):
21 from_command(
22 args=args,
23 program_name=g_program_name,
24 subcommands=command_modules,
25 description='''
26Pyrocko Squirrel - Prompt seismological data access with a fluffy tail.
28This is `squirrel`, a command-line front-end to the Squirrel data access
29infrastructure. The Squirrel infrastructure offers meta-data caching, blazingly
30fast data lookup for large datasets and transparent online data download to
31applications building on it.
33In most cases, the Squirrel does its business discretely under the hood and
34does not require human interaction or awareness. However, using this tool, some
35aspects can be configured for the benefit of greater performance or
36convenience, including (1) using a separate (isolated, local) environment for a
37specific project, (2) using named selections to speed up access to very large
38datasets, (3), pre-scanning/indexing of file collections. It can also be used
39to inspect various aspects of a data collection.
41This tool's functionality is available through several subcommands. Run
42`squirrel [subcommand] --help` to get further help.''')
45def from_command(
46 args=None,
47 program_name=None,
48 description='''
49Pyrocko Squirrel based script.
51Run with --help to get further help.''',
52 subcommands=[]):
54 if program_name is None:
55 program_name = sys.argv[0]
57 if args is None:
58 args = sys.argv[1:]
60 parser = common.PyrockoArgumentParser(
61 prog=program_name,
62 add_help=False,
63 description=description)
65 common.add_standard_arguments(parser)
67 if subcommands:
68 subparsers = parser.add_subparsers(
69 title='Subcommands')
71 for mod in subcommands:
72 subparser = mod.setup(subparsers)
73 subparser.set_defaults(target=mod.call, subparser=subparser)
74 else:
75 common.add_selection_arguments(parser)
77 args = parser.parse_args(args)
78 subparser = args.__dict__.pop('subparser', None)
80 common.process_standard_arguments(parser, args)
82 target = args.__dict__.pop('target', None)
84 if target:
85 try:
86 target(parser, args)
87 except (sq.SquirrelError, sq.ToolError) as e:
88 logger.fatal(str(e))
89 sys.exit(1)
91 elif not subcommands:
92 return common.squirrel_from_selection_arguments(args)
94 else:
95 parser.print_help()
96 sys.exit(0)
99__all__ = [
100 'main',
101 'from_command',
102]