diff options
Diffstat (limited to 'src/flake8/__init__.py')
| -rw-r--r-- | src/flake8/__init__.py | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/src/flake8/__init__.py b/src/flake8/__init__.py new file mode 100644 index 0000000..d6c6915 --- /dev/null +++ b/src/flake8/__init__.py @@ -0,0 +1,82 @@ +"""Top-level module for Flake8. + +This module + +- initializes logging for the command-line tool +- tracks the version of the package +- provides a way to configure logging for the command-line tool + +.. autofunction:: flake8.configure_logging + +""" +import logging +try: + from logging import NullHandler +except ImportError: + class NullHandler(logging.Handler): + """Shim for version of Python < 2.7.""" + + def emit(self, record): + """Do nothing.""" + pass +import sys + +LOG = logging.getLogger(__name__) +LOG.addHandler(NullHandler()) + +# Clean up after LOG config +del NullHandler + +__version__ = '3.0.0b1' +__version_info__ = tuple(int(i) for i in __version__.split('.') if i.isdigit()) + + +# There is nothing lower than logging.DEBUG (10) in the logging library, +# but we want an extra level to avoid being too verbose when using -vv. +_EXTRA_VERBOSE = 5 +logging.addLevelName(_EXTRA_VERBOSE, 'VERBOSE') + +_VERBOSITY_TO_LOG_LEVEL = { + # output more than warnings but not debugging info + 1: logging.INFO, # INFO is a numerical level of 20 + # output debugging information + 2: logging.DEBUG, # DEBUG is a numerical level of 10 + # output extra verbose debugging information + 3: _EXTRA_VERBOSE, +} + +LOG_FORMAT = ('%(name)-25s %(processName)-11s %(relativeCreated)6d ' + '%(levelname)-8s %(message)s') + + +def configure_logging(verbosity, filename=None, logformat=LOG_FORMAT): + """Configure logging for flake8. + + :param int verbosity: + How verbose to be in logging information. + :param str filename: + Name of the file to append log information to. + If ``None`` this will log to ``sys.stderr``. + If the name is "stdout" or "stderr" this will log to the appropriate + stream. + """ + if verbosity <= 0: + return + if verbosity > 3: + verbosity = 3 + + log_level = _VERBOSITY_TO_LOG_LEVEL[verbosity] + + if not filename or filename in ('stderr', 'stdout'): + fileobj = getattr(sys, filename or 'stderr') + handler_cls = logging.StreamHandler + else: + fileobj = filename + handler_cls = logging.FileHandler + + handler = handler_cls(fileobj) + handler.setFormatter(logging.Formatter(logformat)) + LOG.addHandler(handler) + LOG.setLevel(log_level) + LOG.debug('Added a %s logging handler to logger root at %s', + filename, __name__) |
