import logging import sys import optparse def makeLogger(options): logger = logging.getLogger("main") logger.setLevel(logging.INFO) stdout = logging.StreamHandler(sys.stdout) logger.addHandler(stdout) if options.verbose: logger.verbose = True else: if not options.debug: stdout.setLevel(logging.ERROR) if options.debug: logger.setLevel(logging.DEBUG) return logger class UserException(Exception): """User friendly exceptions inherit from here""" pass class NullLogHandler(logging.Handler): """Log handler that doesn't do anything""" def emit(self, record): pass class WizardOptionParser(optparse.OptionParser): """Configures some default user-level options""" def __init__(self, *args, **kwargs): optparse.OptionParser.__init__(self, *args, **kwargs) self.add_option("-v", "--verbose", dest="verbose", action="store_true", default=False, help="Turns on verbose output") self.add_option("--debug", dest="debug", action="store_true", default=False, help="Turns on debugging output") def parse_all(self, argv, logger): options, numeric_args = self.parse_args(argv) return options, numeric_args, logger and logger or makeLogger(options)