|
2 | 2 | Functions to help with the main() |
3 | 3 | """ |
4 | 4 |
|
5 | | -__version__ = '1.0.0' |
| 5 | +__version__ = '1.1.0' |
6 | 6 | __author__ = 'desultory' |
7 | 7 |
|
8 | 8 |
|
| 9 | +BASE_ARGS = [{'flags': ['-d', '--debug'], 'action': 'store_true', 'help': 'Debug mode.'}, |
| 10 | + {'flags': ['-dd', '--trace'], 'action': 'store_true', 'help': 'Trace debug mode.'}, |
| 11 | + {'flags': ['-v', '--version'], 'action': 'store_true', 'help': 'Print the version and exit.'}, |
| 12 | + {'flags': ['--log-file'], 'type': str, 'help': 'Log file path.'}, |
| 13 | + {'flags': ['--log-level'], 'type': str, 'help': 'Log level.'}, |
| 14 | + {'flags': ['--log-time'], 'action': 'store_true', 'help': 'Log timestamps.'}, |
| 15 | + {'flags': ['--no-log-color'], 'action': 'store_true', 'help': 'Disable log color.'}] |
| 16 | + |
| 17 | + |
9 | 18 | def get_kwargs_from_args(args, logger=None, base_kwargs={}, drop_base=True): |
10 | 19 | """ Get kwargs from argparser args. |
11 | 20 | Drop base doesn't add init_argparser args. """ |
@@ -35,16 +44,7 @@ def init_logger(name=None): |
35 | 44 | def init_argparser(prog=None, description=None): |
36 | 45 | """ Initialize an argparser with common options. """ |
37 | 46 | from argparse import ArgumentParser |
38 | | - |
39 | 47 | argparser = ArgumentParser(prog=prog, description=description) |
40 | | - argparser.add_argument('-d', '--debug', action='store_true', help='Debug mode.') |
41 | | - argparser.add_argument('-dd', '--verbose', action='store_true', help='Verbose debug mode.') |
42 | | - argparser.add_argument('-v', '--version', action='store_true', help='Print the version and exit.') |
43 | | - argparser.add_argument('--log-file', type=str, help='Log file path.') |
44 | | - argparser.add_argument('--log-level', type=str, help='Log level.') |
45 | | - argparser.add_argument('--log-time', action='store_true', help='Log timestamps.') |
46 | | - argparser.add_argument('--no-log-color', action='store_true', help='Disable log color.') |
47 | | - |
48 | 48 | return argparser |
49 | 49 |
|
50 | 50 |
|
@@ -90,11 +90,26 @@ def process_args(argparser, logger=None): |
90 | 90 | return args |
91 | 91 |
|
92 | 92 |
|
| 93 | +def dump_args_for_autocomplete(args): |
| 94 | + """ Dump args for autocomplete """ |
| 95 | + for arg in args: |
| 96 | + if arg.get('action') not in ['store_true', 'store_false']: |
| 97 | + continue |
| 98 | + for flag in arg['flags']: |
| 99 | + print(f"{flag} {arg.get('help')}") |
| 100 | + exit(0) |
| 101 | + |
| 102 | + |
93 | 103 | def get_args_n_logger(package, description: str, arguments=[], drop_default=False): |
94 | 104 | """ Takes a package name and description |
95 | 105 | If arguments are passed, they are added to argparser. |
96 | 106 | Returns the parsed args and logger. |
97 | 107 | """ |
| 108 | + arguments = BASE_ARGS + arguments |
| 109 | + from sys import argv |
| 110 | + if '--dump_args' in argv: |
| 111 | + dump_args_for_autocomplete(arguments) |
| 112 | + |
98 | 113 | from argparse import Namespace |
99 | 114 | argparser = init_argparser(prog=package, description=description) |
100 | 115 | logger = init_logger(package) |
|
0 commit comments