diff options
author | Bernat Gabor <bgabor8@bloomberg.net> | 2020-03-29 15:35:05 +0100 |
---|---|---|
committer | Bernat Gabor <bgabor8@bloomberg.net> | 2020-03-30 09:55:12 +0100 |
commit | 741362fb523f48d0fd826006bc6251a85c3ec5f4 (patch) | |
tree | 2caffd43fb8acd3ab80902579524a422e1e6c098 /src/tox/report.py | |
download | tox-git-741362fb523f48d0fd826006bc6251a85c3ec5f4.tar.gz |
First iteration of the rewrite4.0.0a1
Signed-off-by: Bernat Gabor <bgabor8@bloomberg.net>
Diffstat (limited to 'src/tox/report.py')
-rw-r--r-- | src/tox/report.py | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/tox/report.py b/src/tox/report.py new file mode 100644 index 00000000..a14d84e3 --- /dev/null +++ b/src/tox/report.py @@ -0,0 +1,57 @@ +import logging +import sys + +from colorama import Fore, Style, init + +LEVELS = { + 0: logging.CRITICAL, + 1: logging.ERROR, + 2: logging.WARNING, + 3: logging.INFO, + 4: logging.DEBUG, + 5: logging.NOTSET, +} + +MAX_LEVEL = max(LEVELS.keys()) +LOGGER = logging.getLogger() + + +class ToxHandler(logging.StreamHandler): + def __init__(self, level): + super().__init__(stream=sys.stdout) + self.setLevel(level) + formatter = self._get_formatter(level) + self.setFormatter(formatter) + + @staticmethod + def _get_formatter(level): + msg_format = "{}{}%(name)s: {}%(message)s{}".format(Style.BRIGHT, Fore.WHITE, Fore.CYAN, Style.RESET_ALL) + if level <= logging.DEBUG: + locate = "pathname" if level > logging.DEBUG else "module" + msg_format += "{} [%(asctime)s] [%({})s:%(lineno)d]{}".format(Style.DIM, locate, Style.RESET_ALL) + formatter = logging.Formatter(msg_format) + return formatter + + +def setup_report(verbosity): + _clean_handlers(LOGGER) + level = _get_level(verbosity) + LOGGER.setLevel(level) + + handler = ToxHandler(level) + LOGGER.addHandler(handler) + + logging.debug("setup logging to %s", logging.getLevelName(level)) + init() + + +def _get_level(verbosity): + if verbosity > MAX_LEVEL: + verbosity = MAX_LEVEL + level = LEVELS[verbosity] + return level + + +def _clean_handlers(log): + for log_handler in list(log.handlers): # remove handlers of libraries + log.removeHandler(log_handler) |