Passed
Pull Request — master (#15)
by Jace
01:38
created

log.helpers.silence()   A

Complexity

Conditions 5

Size

Total Lines 12
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 5
eloc 10
nop 4
dl 0
loc 12
rs 9.3333
c 0
b 0
f 0
1
"""Wrappers to eliminate boilerplate `logging` activities."""
2
3
import logging
4
5
6
DEFAULT_LEVEL = logging.INFO
7
DEFAULT_FORMAT = "%(levelname)s: %(name)s: %(message)s"
8
9
initialized = False
10
11
12
def init(*, reset=False, debug=False, **kwargs):
13
    if reset:
14
        for handler in logging.root.handlers[:]:
15
            logging.root.removeHandler(handler)
16
17
    custom_format = kwargs.get('format')
18
    default_level = logging.DEBUG if debug else DEFAULT_LEVEL
19
20
    kwargs['level'] = kwargs.get('level', default_level)
21
    kwargs['format'] = kwargs.get('format', DEFAULT_FORMAT)
22
    logging.basicConfig(**kwargs)
23
24
    if custom_format:
25
        formatter = logging.Formatter(custom_format)
26
        for handler in logging.root.handlers:
27
            handler.setFormatter(formatter)
28
29
    global initialized
30
    initialized = True
31
32
33
def silence(*names, allow_info=False, allow_warning=False, allow_error=False):
34
    if allow_info:
35
        level = logging.INFO
36
    elif allow_warning:
37
        level = logging.WARNING
38
    elif allow_error:
39
        level = logging.ERROR
40
    else:
41
        level = logging.CRITICAL
42
43
    for name in names:
44
        logging.getLogger(name).setLevel(level)
45