Completed
Push — master ( cbdbde...55362b )
by Jace
20s queued 11s
created

log.helpers.reset()   A

Complexity

Conditions 1

Size

Total Lines 3
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
nop 0
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
"""Wrappers to eliminate boilerplate `logging` activities."""
2
3
import logging
4
import warnings
5
from importlib import reload
6
7
from . import filters, state
8
9
__all__ = ['reset', 'init', 'silence']
10
11
VERBOSITY_TO_LEVEL = {
12
    0: logging.ERROR,
13
    1: logging.WARNING,
14
    2: logging.INFO,
15
    3: logging.DEBUG,
16
}
17
18
19
def reset():
20
    logging.shutdown()
21
    reload(logging)
22
23
24
def init(*, debug=False, verbosity=None, **kwargs):
25
    if 'reset' in kwargs:  # pragma: no cover
26
        warnings.warn(
27
            (
28
                "'reset' option will be removed in the next major version."
29
                " Use 'log.reset()' instead."
30
            ),
31
            DeprecationWarning,
32
        )
33
        should_reset = kwargs.pop('reset')
34
        if should_reset:
35
            reset()
36
37
    custom_format = kwargs.get('format')
38
    if debug:
39
        state.default_level = logging.DEBUG
40
    elif verbosity is not None:
41
        state.default_level = VERBOSITY_TO_LEVEL[verbosity]
42
43
    kwargs['level'] = kwargs.get('level', state.default_level)
44
    kwargs['format'] = kwargs.get('format', state.default_format)
45
    logging.basicConfig(**kwargs)
46
47
    if custom_format:
48
        formatter = logging.Formatter(
49
            fmt=custom_format,
50
            datefmt=kwargs.get('datefmt'),
51
            style=kwargs.get('style', '%'),
52
        )
53
        for handler in logging.root.handlers:
54
            handler.setFormatter(formatter)
55
56
    filters.install(logging.root)
57
58
    state.initialized = True
59
60
61
def silence(*names, allow_info=False, allow_warning=False, allow_error=False):
62
    if allow_info:
63
        level = logging.INFO
64
    elif allow_warning:
65
        level = logging.WARNING
66
    elif allow_error:
67
        level = logging.ERROR
68
    else:
69
        level = logging.CRITICAL
70
71
    for name in names:
72
        logging.getLogger(name).setLevel(level)
73