From 9a04ce660c9fbb04af9ebde523d010eec7aa5e86 Mon Sep 17 00:00:00 2001 From: Kernc Date: Sun, 15 Nov 2015 20:34:35 +0100 Subject: [PATCH] Add --fatal=errors|warnings program option --- pelican/__init__.py | 7 ++++++- pelican/log.py | 21 +++++++++++++++++++-- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/pelican/__init__.py b/pelican/__init__.py index 48cb5980..5074e182 100644 --- a/pelican/__init__.py +++ b/pelican/__init__.py @@ -322,6 +322,11 @@ def parse_arguments(): dest='selected_paths', default=None, help='Comma separated list of selected paths to write') + parser.add_argument('--fatal', metavar='errors|warnings', + choices=('errors', 'warnings'), + help=('Exit the program with non-zero status if any ' + 'errors/warnings encountered.')) + return parser.parse_args() @@ -378,7 +383,7 @@ def get_instance(args): def main(): args = parse_arguments() - init(args.verbosity) + init(args.verbosity, args.fatal) logger.debug('Pelican version: %s', __version__) logger.debug('Python version: %s', sys.version.split()[0]) diff --git a/pelican/log.py b/pelican/log.py index 747aa38d..3d365607 100644 --- a/pelican/log.py +++ b/pelican/log.py @@ -175,7 +175,22 @@ class LimitLogger(SafeLogger): def enable_filter(self): self.addFilter(LimitLogger.limit_filter) -logging.setLoggerClass(LimitLogger) + +class FatalLogger(LimitLogger): + warnings_fatal = False + errors_fatal = False + + def warning(self, *args, **kwargs): + super(FatalLogger, self).warning(*args, **kwargs) + if FatalLogger.warnings_fatal: + raise RuntimeError('Warning encountered') + + def error(self, *args, **kwargs): + super(FatalLogger, self).error(*args, **kwargs) + if FatalLogger.errors_fatal: + raise RuntimeError('Error encountered') + +logging.setLoggerClass(FatalLogger) def supports_color(): @@ -203,7 +218,9 @@ def get_formatter(): return TextFormatter() -def init(level=None, handler=logging.StreamHandler(), name=None): +def init(level=None, fatal='', handler=logging.StreamHandler(), name=None): + FatalLogger.warnings_fatal = fatal.startswith('warning') + FatalLogger.errors_fatal = bool(fatal) logger = logging.getLogger(name)