Skip to content

Commit e7bc912

Browse files
committed
consolidated functions
Signed-off-by: Zen <[email protected]>
1 parent d8bdd55 commit e7bc912

File tree

7 files changed

+109
-112
lines changed

7 files changed

+109
-112
lines changed

src/zenlib/util/__init__.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
from .update_init import update_init
66
from .walk_dict import walk_dict
77
from .check_dict import check_dict
8-
from .init_logger import init_logger
9-
from .process_args import process_args
10-
from .init_argparser import init_argparser
11-
from .get_args_n_logger import get_args_n_logger
12-
from .get_kwargs_from_args import get_kwargs_from_args
8+
from .main_funcs import init_logger
9+
from .main_funcs import process_args
10+
from .main_funcs import init_argparser
11+
from .main_funcs import get_args_n_logger
12+
from .main_funcs import get_kwargs_from_args
1313

1414
__all__ = ['handle_plural', 'NoDupFlatList', 'pretty_print', 'replace_file_line',
1515
'update_init', 'walk_dict', 'check_dict', 'init_logger', 'process_args',

src/zenlib/util/get_args_n_logger.py

Lines changed: 0 additions & 20 deletions
This file was deleted.

src/zenlib/util/get_kwargs_from_args.py

Lines changed: 0 additions & 23 deletions
This file was deleted.

src/zenlib/util/init_argparser.py

Lines changed: 0 additions & 15 deletions
This file was deleted.

src/zenlib/util/init_logger.py

Lines changed: 0 additions & 8 deletions
This file was deleted.

src/zenlib/util/main_funcs.py

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
"""
2+
Functions to help with the main()
3+
"""
4+
5+
6+
def get_kwargs_from_args(args, logger=None, base_kwargs={}):
7+
""" Get kwargs from argparser args """
8+
kwargs = base_kwargs.copy()
9+
if logger is not None:
10+
kwargs['logger'] = logger
11+
12+
for arg in vars(args):
13+
value = getattr(args, arg)
14+
if value is None or value is False:
15+
continue
16+
17+
kwargs[arg] = value
18+
return kwargs
19+
20+
21+
def init_logger(name=None):
22+
""" Initialize the logger with a name"""
23+
from logging import getLogger
24+
name = name or __name__
25+
return getLogger(name)
26+
27+
28+
def init_argparser(prog=None, description=None):
29+
""" Initialize an argparser with common options. """
30+
from argparse import ArgumentParser
31+
32+
argparser = ArgumentParser(prog=prog, description=description)
33+
argparser.add_argument('-d', '--debug', action='store_true', help='Debug mode.')
34+
argparser.add_argument('-dd', '--verbose', action='store_true', help='Verbose debug mode.')
35+
argparser.add_argument('-v', '--version', action='store_true', help='Print the version and exit.')
36+
argparser.add_argument('--log-file', type=str, help='Log file path.')
37+
argparser.add_argument('--log-level', type=str, help='Log level.')
38+
argparser.add_argument('--log-time', action='store_true', help='Log timestamps.')
39+
argparser.add_argument('--no-log-color', action='store_true', help='Disable log color.')
40+
41+
return argparser
42+
43+
44+
def process_args(argparser, logger=None):
45+
""" Process argparser args, optionally configuring a logger. """
46+
from logging import Formatter
47+
from zenlib.logging import ColorLognameFormatter
48+
args = argparser.parse_args()
49+
if args.version:
50+
package = argparser.prog
51+
from importlib.metadata import version
52+
print(f"{package} {version(package)}")
53+
exit(0)
54+
55+
if logger:
56+
if args.log_level is not None:
57+
log_level = int(args.log_level)
58+
elif args.verbose:
59+
log_level = 5
60+
elif args.debug:
61+
log_level = 10
62+
else:
63+
log_level = 20
64+
logger.setLevel(log_level)
65+
66+
format_str = '%(asctime)s | ' if args.log_time else ''
67+
if log_level < 20:
68+
format_str += '%(levelname)s | %(name)-42s | %(message)s'
69+
else:
70+
format_str += '%(levelname)s | %(message)s'
71+
formatter = ColorLognameFormatter(format_str) if not args.no_log_color else Formatter(format_str)
72+
73+
# Add the formatter to the first handler, or add a new handler
74+
for handler in logger.handlers:
75+
handler.setFormatter(formatter)
76+
break
77+
else:
78+
from logging import StreamHandler, FileHandler
79+
handler = StreamHandler() if args.log_file is None else FileHandler(args.log_file)
80+
handler.setFormatter(formatter)
81+
logger.addHandler(handler)
82+
83+
return args
84+
85+
86+
def get_args_n_logger(package, description: str, arguments=[], get_kwargs=False):
87+
""" Takes a package name and description
88+
If arguments are passed, they are added to argparser.
89+
If get_kwargs is set to True a kwarg dict will be returned.
90+
If not, returns the parsed args and logger.
91+
"""
92+
argparser = init_argparser(prog=package, description=description)
93+
logger = init_logger(package)
94+
95+
for arg in arguments:
96+
dest = arg.pop('flags')
97+
argparser.add_argument(*dest, **arg)
98+
99+
args = process_args(argparser, logger=logger)
100+
101+
if get_kwargs:
102+
return get_kwargs_from_args(args, logger=logger)
103+
104+
return args, logger

src/zenlib/util/process_args.py

Lines changed: 0 additions & 41 deletions
This file was deleted.

0 commit comments

Comments
 (0)