from typing import Any import click class Logger: verbose: bool def __init__(self, verbose: bool = False): self.verbose = verbose @staticmethod def _log(prefix: str = 'LOG', message: Any = '', nl: bool = True, **kwargs) -> None: text = '{}: {}'.format(prefix, message) if message else '' click.secho(text, nl=nl, **kwargs) @staticmethod def _join(*args, delimiter: str = ' ') -> str: return delimiter.join([str(arg) for arg in args]) def debug(self, *args, **kwargs) -> None: """ Write a message to stdout only if the '--verbose' option is set (in gray). """ if self.verbose: kwargs.setdefault('fg', 'bright_black') self._log('DEBUG', self._join(*args), **kwargs) def info(self, *args, **kwargs) -> None: """ Write a message to stdout (in white). """ kwargs.setdefault('fg', 'white') self._log('INFO', self._join(*args), **kwargs) def warn(self, *args, **kwargs) -> None: """ Write a warning message to stderr (in yellow). """ kwargs.setdefault('fg', 'yellow') self._log('WARNING', self._join(*args), **kwargs) def error(self, *args, **kwargs) -> None: """ Write an error message to stderr (in red). """ kwargs.setdefault('fg', 'red') self._log('ERROR', self._join(*args), err=True, **kwargs) def success(self, *args, **kwargs) -> None: """ Write a success message stdout (in green). """ kwargs.setdefault('fg', 'green') self._log('SUCCESS', self._join(*args), **kwargs) logger = Logger()