From 3967c273f88b13692413eeba23cf8aed4f686ba8 Mon Sep 17 00:00:00 2001 From: Ross McFarland Date: Tue, 27 Sep 2022 08:06:30 -0700 Subject: [PATCH] --debug flag to commands, work-around to ensure PlanLogger plan always prints --- octodns/cmds/args.py | 11 ++++++++++- octodns/provider/plan.py | 17 ++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/octodns/cmds/args.py b/octodns/cmds/args.py index 9229d41..9b804ae 100644 --- a/octodns/cmds/args.py +++ b/octodns/cmds/args.py @@ -50,6 +50,11 @@ class ArgumentParser(_Base): '--debug', action='store_true', default=False, help=_help ) + _help = 'Decrease verbosity to show only warnings, errors, and the plan' + self.add_argument( + '--quiet', action='store_true', default=False, help=_help + ) + args = super().parse_args() self._setup_logging(args, default_log_level) return args @@ -74,7 +79,11 @@ class ArgumentParser(_Base): handler.setFormatter(Formatter(fmt=fmt)) logger.addHandler(handler) - logger.level = DEBUG if args.debug else default_log_level + logger.level = default_log_level + if args.debug: + logger.level = DEBUG + elif args.quiet: + logger.level = WARNING # boto is noisy, set it to warn getLogger('botocore').level = WARNING diff --git a/octodns/provider/plan.py b/octodns/provider/plan.py index 5e38749..30c0ff6 100644 --- a/octodns/provider/plan.py +++ b/octodns/provider/plan.py @@ -134,6 +134,19 @@ class _PlanOutput(object): self.name = name +class _LogLevelSetter: + def __init__(self, logger, level): + self.logger = getLogger() + self.level = level + + def __enter__(self, *args, **kwargs): + self.original_level = self.logger.level + self.logger.setLevel(self.level) + + def __exit__(self, *args, **kwargs): + self.logger.setLevel(self.original_level) + + class PlanLogger(_PlanOutput): def __init__(self, name, level='info'): super().__init__(name) @@ -189,7 +202,9 @@ class PlanLogger(_PlanOutput): buf.write('No changes were planned\n') buf.write(hr) buf.write('\n') - log.log(self.level, buf.getvalue()) + + with _LogLevelSetter(log, INFO): + log.log(self.level, buf.getvalue()) def _value_stringifier(record, sep):