-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
arglog.py
52 lines (38 loc) · 1.22 KB
/
arglog.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
"""
Arglog
======
Automatically configure an argparse.ArgumentParser with a --loglevel option.
"""
__version__ = '2017.6.2'
from argparse import ArgumentParser
import logging
try:
# Python 3
_level_names = logging._nameToLevel
except:
# Python 2
_level_names = logging._levelNames
def patch(parser, default='INFO', basicConfig_kwargs=None):
# type: (ArgumentParser, str) -> None
basicConfig_kwargs = basicConfig_kwargs or {}
parser.add_argument(
'-l', '--loglevel', help='Logging level', default=default,
choices=list(_level_names.keys()),
)
def configure_logging(args):
logging.basicConfig(
level=_level_names[args.loglevel],
**basicConfig_kwargs
)
original_parse_args = parser.parse_args
original_parse_known_args = parser.parse_known_args
def new_parse_args(*args, **kwargs):
args = original_parse_args()
configure_logging(args)
return args
def new_parse_known_args(*args, **kwargs):
args, unknown_args = original_parse_known_args()
configure_logging(args)
return args, unknown_args
parser.parse_args = new_parse_args
parser.parse_known_args = new_parse_known_args