Skip to content

Commit 7f0780b

Browse files
committed
add option to --dump_args for completion
Signed-off-by: Zen <[email protected]>
1 parent 7bae785 commit 7f0780b

File tree

2 files changed

+26
-11
lines changed

2 files changed

+26
-11
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "zenlib"
7-
version = "2.0.4"
7+
version = "2.1.0"
88
authors = [
99
{ name="Desultory", email="[email protected]" },
1010
]

src/zenlib/util/main_funcs.py

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,19 @@
22
Functions to help with the main()
33
"""
44

5-
__version__ = '1.0.0'
5+
__version__ = '1.1.0'
66
__author__ = 'desultory'
77

88

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+
918
def get_kwargs_from_args(args, logger=None, base_kwargs={}, drop_base=True):
1019
""" Get kwargs from argparser args.
1120
Drop base doesn't add init_argparser args. """
@@ -35,16 +44,7 @@ def init_logger(name=None):
3544
def init_argparser(prog=None, description=None):
3645
""" Initialize an argparser with common options. """
3746
from argparse import ArgumentParser
38-
3947
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-
4848
return argparser
4949

5050

@@ -90,11 +90,26 @@ def process_args(argparser, logger=None):
9090
return args
9191

9292

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+
93103
def get_args_n_logger(package, description: str, arguments=[], drop_default=False):
94104
""" Takes a package name and description
95105
If arguments are passed, they are added to argparser.
96106
Returns the parsed args and logger.
97107
"""
108+
arguments = BASE_ARGS + arguments
109+
from sys import argv
110+
if '--dump_args' in argv:
111+
dump_args_for_autocomplete(arguments)
112+
98113
from argparse import Namespace
99114
argparser = init_argparser(prog=package, description=description)
100115
logger = init_logger(package)

0 commit comments

Comments
 (0)