summaryrefslogtreecommitdiff
path: root/src/flake8/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/flake8/__init__.py')
-rw-r--r--src/flake8/__init__.py82
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__)