Skip to content

Instantly share code, notes, and snippets.

@carlos-jenkins
Created May 16, 2017 20:35
Show Gist options
  • Save carlos-jenkins/f73b101998c4a0bec7e690881f7f4453 to your computer and use it in GitHub Desktop.
Save carlos-jenkins/f73b101998c4a0bec7e690881f7f4453 to your computer and use it in GitHub Desktop.
Colored Logging
# Requires thrid-party awesome module colorlog
import logging
from colorlog import ColoredFormatter
from . import __version__
log = logging.getLogger(__name__)
FORMAT = (
' %(log_color)s%(levelname)-8s%(reset)s | '
'%(log_color)s%(message)s%(reset)s'
)
V_LEVELS = {
0: logging.ERROR,
1: logging.WARNING,
2: logging.INFO,
3: logging.DEBUG,
}
def validate_args(args):
"""
Validate that arguments are valid.
:param args: An arguments namespace.
:type args: :py:class:`argparse.Namespace`
:return: The validated namespace.
:rtype: :py:class:`argparse.Namespace`
"""
stream = logging.StreamHandler()
stream.setFormatter(ColoredFormatter(FORMAT))
level = V_LEVELS.get(args.verbose, logging.DEBUG)
logging.basicConfig(handlers=[stream], level=level)
log.debug('Raw arguments:\n{}'.format(args))
return args
def parse_args(argv=None):
"""
Argument parsing routine.
:param argv: A list of argument strings.
:rtype argv: list
:return: A parsed and verified arguments namespace.
:rtype: :py:class:`argparse.Namespace`
"""
from argparse import ArgumentParser
parser = ArgumentParser(
description='<DESCRIPTION OF THE PROGRAM>'
)
parser.add_argument(
'-v', '--verbose',
help='increase verbosity level',
default=0,
action='count'
)
parser.add_argument(
'--version',
action='version',
version='<PROGRAM> {}'.format(__version__)
)
args = parser.parse_args(argv)
args = validate_args(args)
return args
__all__ = ['parse_args']
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment