More tests for colored logging.

This commit is contained in:
Dan Helfman 2019-05-13 21:10:26 -07:00
parent 620f9e64d6
commit a13cc0ab17
4 changed files with 43 additions and 12 deletions

View file

@ -64,9 +64,9 @@ def convert_legacy_parsed_config(source_config, source_excludes, schema):
return destination_config return destination_config
class LegacyConfigurationNotUpgraded(FileNotFoundError): class Legacy_configuration_not_upgraded(FileNotFoundError):
def __init__(self): def __init__(self):
super(LegacyConfigurationNotUpgraded, self).__init__( super(Legacy_configuration_not_upgraded, self).__init__(
'''borgmatic changed its configuration file format in version 1.1.0 from INI-style '''borgmatic changed its configuration file format in version 1.1.0 from INI-style
to YAML. This better supports validation, and has a more natural way to express to YAML. This better supports validation, and has a more natural way to express
lists of values. To upgrade your existing configuration, run: lists of values. To upgrade your existing configuration, run:
@ -83,7 +83,7 @@ instead of the old one.'''
def guard_configuration_upgraded(source_config_filename, destination_config_filenames): def guard_configuration_upgraded(source_config_filename, destination_config_filenames):
''' '''
If legacy source configuration exists but no destination upgraded configs do, raise If legacy source configuration exists but no destination upgraded configs do, raise
LegacyConfigurationNotUpgraded. Legacy_configuration_not_upgraded.
The idea is that we want to alert the user about upgrading their config if they haven't already. The idea is that we want to alert the user about upgrading their config if they haven't already.
''' '''
@ -92,4 +92,4 @@ def guard_configuration_upgraded(source_config_filename, destination_config_file
) )
if os.path.exists(source_config_filename) and not destination_config_exists: if os.path.exists(source_config_filename) and not destination_config_exists:
raise LegacyConfigurationNotUpgraded() raise Legacy_configuration_not_upgraded()

View file

@ -38,32 +38,38 @@ def should_do_markup(no_color):
LOG_LEVEL_TO_COLOR = { LOG_LEVEL_TO_COLOR = {
logging.CRITICAL: colorama.Fore.RED, logging.CRITICAL: colorama.Fore.RED,
logging.ERROR: colorama.Fore.RED,
logging.WARN: colorama.Fore.YELLOW, logging.WARN: colorama.Fore.YELLOW,
logging.INFO: colorama.Fore.GREEN, logging.INFO: colorama.Fore.GREEN,
logging.DEBUG: colorama.Fore.CYAN, logging.DEBUG: colorama.Fore.CYAN,
} }
class BorgmaticLogger(logging.Logger): class Borgmatic_logger(logging.Logger):
def critical(self, msg, *args, **kwargs): def critical(self, msg, *args, **kwargs):
color = LOG_LEVEL_TO_COLOR.get(logging.CRITICAL) color = LOG_LEVEL_TO_COLOR.get(logging.CRITICAL)
return super(BorgmaticLogger, self).critical(color_text(color, msg), *args, **kwargs) return super(Borgmatic_logger, self).critical(color_text(color, msg), *args, **kwargs)
def error(self, msg, *args, **kwargs):
color = LOG_LEVEL_TO_COLOR.get(logging.ERROR)
return super(Borgmatic_logger, self).error(color_text(color, msg), *args, **kwargs)
def warn(self, msg, *args, **kwargs): def warn(self, msg, *args, **kwargs):
color = LOG_LEVEL_TO_COLOR.get(logging.WARN) color = LOG_LEVEL_TO_COLOR.get(logging.WARN)
return super(BorgmaticLogger, self).warn(color_text(color, msg), *args, **kwargs) return super(Borgmatic_logger, self).warn(color_text(color, msg), *args, **kwargs)
def info(self, msg, *args, **kwargs): def info(self, msg, *args, **kwargs):
color = LOG_LEVEL_TO_COLOR.get(logging.INFO) color = LOG_LEVEL_TO_COLOR.get(logging.INFO)
return super(BorgmaticLogger, self).info(color_text(color, msg), *args, **kwargs) return super(Borgmatic_logger, self).info(color_text(color, msg), *args, **kwargs)
def debug(self, msg, *args, **kwargs): def debug(self, msg, *args, **kwargs):
color = LOG_LEVEL_TO_COLOR.get(logging.DEBUG) color = LOG_LEVEL_TO_COLOR.get(logging.DEBUG)
return super(BorgmaticLogger, self).debug(color_text(color, msg), *args, **kwargs) return super(Borgmatic_logger, self).debug(color_text(color, msg), *args, **kwargs)
def handle(self, record): def handle(self, record):
color = LOG_LEVEL_TO_COLOR.get(record.levelno) color = LOG_LEVEL_TO_COLOR.get(record.levelno)
@ -71,14 +77,14 @@ class BorgmaticLogger(logging.Logger):
dict(levelno=record.levelno, msg=color_text(color, record.msg)) dict(levelno=record.levelno, msg=color_text(color, record.msg))
) )
return super(BorgmaticLogger, self).handle(colored_record) return super(Borgmatic_logger, self).handle(colored_record)
def get_logger(name=None): def get_logger(name=None):
''' '''
Build a logger with the given name. Build a logger with the given name.
''' '''
logging.setLoggerClass(BorgmaticLogger) logging.setLoggerClass(Borgmatic_logger)
logger = logging.getLogger(name) logger = logging.getLogger(name)
logger.propagate = False logger.propagate = False
return logger return logger

View file

@ -91,7 +91,7 @@ def test_guard_configuration_upgraded_raises_when_only_source_config_present():
flexmock(os.path).should_receive('exists').with_args('config.yaml').and_return(False) flexmock(os.path).should_receive('exists').with_args('config.yaml').and_return(False)
flexmock(os.path).should_receive('exists').with_args('other.yaml').and_return(False) flexmock(os.path).should_receive('exists').with_args('other.yaml').and_return(False)
with pytest.raises(module.LegacyConfigurationNotUpgraded): with pytest.raises(module.Legacy_configuration_not_upgraded):
module.guard_configuration_upgraded('config', ('config.yaml', 'other.yaml')) module.guard_configuration_upgraded('config', ('config.yaml', 'other.yaml'))

View file

@ -47,3 +47,28 @@ def test_should_do_markup_prefers_PY_COLORS_to_stdout_tty_value():
flexmock(module).should_receive('to_bool').and_return(True) flexmock(module).should_receive('to_bool').and_return(True)
assert module.should_do_markup(no_color=False) is True assert module.should_do_markup(no_color=False) is True
@pytest.mark.parametrize('method_name', ('critical', 'error', 'warn', 'info', 'debug'))
def test_borgmatic_logger_log_method_does_not_raise(method_name):
flexmock(module).should_receive('color_text')
flexmock(module.logging.Logger).should_receive(method_name)
getattr(module.Borgmatic_logger('test'), method_name)(msg='hi')
def test_borgmatic_logger_handle_does_not_raise():
flexmock(module).should_receive('color_text')
flexmock(module.logging.Logger).should_receive('handle')
module.Borgmatic_logger('test').handle(
module.logging.makeLogRecord(dict(levelno=module.logging.CRITICAL, msg='hi'))
)
def test_color_text_does_not_raise():
module.color_text(module.colorama.Fore.RED, 'hi')
def test_color_text_without_color_does_not_raise():
module.color_text(None, 'hi')