Support for NO_COLOR environment variable (#835).

Merge pull request #82 from shivansh02/feature/support-no-color-env-var
This commit is contained in:
Dan Helfman 2024-03-04 13:46:09 -08:00 committed by GitHub
commit 16bc0de3fb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 42 additions and 5 deletions

View file

@ -41,6 +41,10 @@ def should_do_markup(no_color, configs):
if any(config.get('output', {}).get('color') is False for config in configs.values()): if any(config.get('output', {}).get('color') is False for config in configs.values()):
return False return False
no_color_env = os.environ.get('NO_COLOR', None)
if no_color_env is not None:
return False
py_colors = os.environ.get('PY_COLORS', None) py_colors = os.environ.get('PY_COLORS', None)
if py_colors is not None: if py_colors is not None:

View file

@ -406,7 +406,7 @@ source /usr/share/fish/vendor_completions.d/borgmatic.fish
borgmatic produces colored terminal output by default. It is disabled when a borgmatic produces colored terminal output by default. It is disabled when a
non-interactive terminal is detected (like a cron job), or when you use the non-interactive terminal is detected (like a cron job), or when you use the
`--json` flag. Otherwise, you can disable it by passing the `--no-color` flag, `--json` flag. Otherwise, you can disable it by passing the `--no-color` flag,
setting the environment variable `PY_COLORS=False`, or setting the `color` setting the environment variables `PY_COLORS=False` or `NO_COLOR=True`, or setting the `color`
option to `false` in the `output` section of configuration. option to `false` in the `output` section of configuration.

View file

@ -69,7 +69,11 @@ def test_should_do_markup_prefers_any_false_config_value():
def test_should_do_markup_respects_PY_COLORS_environment_variable(): def test_should_do_markup_respects_PY_COLORS_environment_variable():
flexmock(module.os.environ).should_receive('get').and_return('True') flexmock(module.os.environ).should_receive('get').with_args('PY_COLORS', None).and_return(
'True'
)
flexmock(module.os.environ).should_receive('get').with_args('NO_COLOR', None).and_return(None)
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, configs={}) is True assert module.should_do_markup(no_color=False, configs={}) is True
@ -82,7 +86,7 @@ def test_should_do_markup_prefers_no_color_value_to_config_value():
) )
def test_should_do_markup_prefers_config_value_to_PY_COLORS(): def test_should_do_markup_prefers_config_value_to_environment_variables():
flexmock(module.os.environ).should_receive('get').and_return('True') flexmock(module.os.environ).should_receive('get').and_return('True')
flexmock(module).should_receive('to_bool').and_return(True) flexmock(module).should_receive('to_bool').and_return(True)
@ -92,7 +96,7 @@ def test_should_do_markup_prefers_config_value_to_PY_COLORS():
) )
def test_should_do_markup_prefers_no_color_value_to_PY_COLORS(): def test_should_do_markup_prefers_no_color_value_to_environment_variables():
flexmock(module.os.environ).should_receive('get').and_return('True') flexmock(module.os.environ).should_receive('get').and_return('True')
flexmock(module).should_receive('to_bool').and_return(True) flexmock(module).should_receive('to_bool').and_return(True)
@ -107,13 +111,42 @@ def test_should_do_markup_respects_interactive_console_value():
def test_should_do_markup_prefers_PY_COLORS_to_interactive_console_value(): def test_should_do_markup_prefers_PY_COLORS_to_interactive_console_value():
flexmock(module.os.environ).should_receive('get').and_return('True') flexmock(module.os.environ).should_receive('get').with_args('PY_COLORS', None).and_return(
'True'
)
flexmock(module.os.environ).should_receive('get').with_args('NO_COLOR', None).and_return(None)
flexmock(module).should_receive('to_bool').and_return(True) flexmock(module).should_receive('to_bool').and_return(True)
flexmock(module).should_receive('interactive_console').and_return(False) flexmock(module).should_receive('interactive_console').and_return(False)
assert module.should_do_markup(no_color=False, configs={}) is True assert module.should_do_markup(no_color=False, configs={}) is True
def test_should_do_markup_prefers_NO_COLOR_to_interactive_console_value():
flexmock(module.os.environ).should_receive('get').with_args('PY_COLORS', None).and_return(None)
flexmock(module.os.environ).should_receive('get').with_args('NO_COLOR', None).and_return('True')
flexmock(module).should_receive('interactive_console').and_return(False)
assert module.should_do_markup(no_color=False, configs={}) is False
def test_should_do_markup_respects_NO_COLOR_environment_variable():
flexmock(module.os.environ).should_receive('get').with_args('NO_COLOR', None).and_return('True')
flexmock(module.os.environ).should_receive('get').with_args('PY_COLORS', None).and_return(None)
assert module.should_do_markup(no_color=False, configs={}) is False
def test_should_do_markup_prefers_NO_COLOR_to_PY_COLORS():
flexmock(module.os.environ).should_receive('get').with_args('PY_COLORS', None).and_return(
'True'
)
flexmock(module.os.environ).should_receive('get').with_args('NO_COLOR', None).and_return(
'SomeValue'
)
assert module.should_do_markup(no_color=False, configs={}) is False
def test_multi_stream_handler_logs_to_handler_for_log_level(): def test_multi_stream_handler_logs_to_handler_for_log_level():
error_handler = flexmock() error_handler = flexmock()
error_handler.should_receive('emit').once() error_handler.should_receive('emit').once()