From 7074b4928c2be867b375212db903a75f5a12ca70 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Thu, 19 May 2011 22:30:09 +0200 Subject: [PATCH 1/5] Add some tests for --list-settings formatting --- mopidy/utils/settings.py | 7 +++++-- tests/utils/settings_test.py | 35 +++++++++++++++++++++++++++++++++-- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/mopidy/utils/settings.py b/mopidy/utils/settings.py index 7f541c21..eeb5c32f 100644 --- a/mopidy/utils/settings.py +++ b/mopidy/utils/settings.py @@ -140,6 +140,10 @@ def list_settings_optparse_callback(*args): option. """ from mopidy import settings + print u'Settings: %s' % indent(format_settings_list(settings), places=2) + sys.exit(0) + +def format_settings_list(settings): errors = settings.get_errors() lines = [] for (key, value) in sorted(settings.current.iteritems()): @@ -151,8 +155,7 @@ def list_settings_optparse_callback(*args): lines.append(u' Default: %s' % repr(default_value)) if errors.get(key) is not None: lines.append(u' Error: %s' % errors[key]) - print u'Settings: %s' % indent('\n'.join(lines), places=2) - sys.exit(0) + return '\n'.join(lines) def mask_value_if_secret(key, value): if key.endswith('PASSWORD') and value: diff --git a/tests/utils/settings_test.py b/tests/utils/settings_test.py index 11914f61..f23ce06d 100644 --- a/tests/utils/settings_test.py +++ b/tests/utils/settings_test.py @@ -2,8 +2,8 @@ import os import unittest from mopidy import settings as default_settings_module, SettingsError -from mopidy.utils.settings import validate_settings, SettingsProxy -from mopidy.utils.settings import mask_value_if_secret +from mopidy.utils.settings import (format_settings_list, mask_value_if_secret, + SettingsProxy, validate_settings) class ValidateSettingsTest(unittest.TestCase): def setUp(self): @@ -140,3 +140,34 @@ class SettingsProxyTest(unittest.TestCase): self.settings.TEST = './test' actual = self.settings.TEST self.assertEqual(actual, './test') + + +class FormatSettingListTest(unittest.TestCase): + def setUp(self): + self.settings = SettingsProxy(default_settings_module) + + def test_contains_the_setting_name(self): + self.settings.TEST = u'test' + result = format_settings_list(self.settings) + self.assert_('TEST:' in result, result) + + def test_repr_of_a_string_value(self): + self.settings.TEST = u'test' + result = format_settings_list(self.settings) + self.assert_("Value: u'test'" in result, result) + + def test_repr_of_an_int_value(self): + self.settings.TEST = 123 + result = format_settings_list(self.settings) + self.assert_("Value: 123" in result, result) + + def test_repr_of_a_tuple_value(self): + self.settings.TEST = (123, u'abc') + result = format_settings_list(self.settings) + self.assert_("Value: (123, u'abc')" in result, result) + + def test_passwords_are_masked(self): + self.settings.TEST_PASSWORD = u'secret' + result = format_settings_list(self.settings) + self.assert_("Value: u'secret'" not in result, result) + self.assert_("Value: u'********'" in result, result) From a760a7fdb4be2c0840752f3262abe8033676bc5b Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Thu, 19 May 2011 22:31:04 +0200 Subject: [PATCH 2/5] Use pprint to format long setting values --- mopidy/utils/settings.py | 5 +++-- tests/utils/settings_test.py | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/mopidy/utils/settings.py b/mopidy/utils/settings.py index eeb5c32f..e80731af 100644 --- a/mopidy/utils/settings.py +++ b/mopidy/utils/settings.py @@ -3,6 +3,7 @@ from __future__ import absolute_import from copy import copy import logging import os +from pprint import pformat import sys from mopidy import SettingsError @@ -150,9 +151,9 @@ def format_settings_list(settings): default_value = settings.default.get(key) value = mask_value_if_secret(key, value) lines.append(u'%s:' % key) - lines.append(u' Value: %s' % repr(value)) + lines.append(u' Value: %s' % indent(pformat(value))) if value != default_value and default_value is not None: - lines.append(u' Default: %s' % repr(default_value)) + lines.append(u' Default: %s' % indent(pformat(default_value))) if errors.get(key) is not None: lines.append(u' Error: %s' % errors[key]) return '\n'.join(lines) diff --git a/tests/utils/settings_test.py b/tests/utils/settings_test.py index f23ce06d..896f1b6a 100644 --- a/tests/utils/settings_test.py +++ b/tests/utils/settings_test.py @@ -171,3 +171,18 @@ class FormatSettingListTest(unittest.TestCase): result = format_settings_list(self.settings) self.assert_("Value: u'secret'" not in result, result) self.assert_("Value: u'********'" in result, result) + + def test_short_values_are_not_pretty_printed(self): + self.settings.FRONTEND = (u'mopidy.frontends.mpd.MpdFrontend',) + result = format_settings_list(self.settings) + self.assert_("Value: (u'mopidy.frontends.mpd.MpdFrontend',)" in result, + result) + + def test_long_values_are_pretty_printed(self): + self.settings.FRONTEND = (u'mopidy.frontends.mpd.MpdFrontend', + u'mopidy.frontends.lastfm.LastfmFrontend') + result = format_settings_list(self.settings) + self.assert_("""FRONTEND: + Value: + (u'mopidy.frontends.mpd.MpdFrontend', + u'mopidy.frontends.lastfm.LastfmFrontend')""" in result, result) From 0b2b0c5c3c8480f677979d5774477946d2a8ef5a Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Thu, 19 May 2011 22:37:09 +0200 Subject: [PATCH 3/5] Show current setting value on same line as setting name --- mopidy/utils/settings.py | 6 +++--- tests/utils/settings_test.py | 19 +++++++++---------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/mopidy/utils/settings.py b/mopidy/utils/settings.py index e80731af..0a8dbb1a 100644 --- a/mopidy/utils/settings.py +++ b/mopidy/utils/settings.py @@ -150,10 +150,10 @@ def format_settings_list(settings): for (key, value) in sorted(settings.current.iteritems()): default_value = settings.default.get(key) value = mask_value_if_secret(key, value) - lines.append(u'%s:' % key) - lines.append(u' Value: %s' % indent(pformat(value))) + lines.append(u'%s: %s' % (key, indent(pformat(value), places=2))) if value != default_value and default_value is not None: - lines.append(u' Default: %s' % indent(pformat(default_value))) + lines.append(u' Default: %s' % + indent(pformat(default_value), places=4)) if errors.get(key) is not None: lines.append(u' Error: %s' % errors[key]) return '\n'.join(lines) diff --git a/tests/utils/settings_test.py b/tests/utils/settings_test.py index 896f1b6a..1ffff9a6 100644 --- a/tests/utils/settings_test.py +++ b/tests/utils/settings_test.py @@ -154,35 +154,34 @@ class FormatSettingListTest(unittest.TestCase): def test_repr_of_a_string_value(self): self.settings.TEST = u'test' result = format_settings_list(self.settings) - self.assert_("Value: u'test'" in result, result) + self.assert_("TEST: u'test'" in result, result) def test_repr_of_an_int_value(self): self.settings.TEST = 123 result = format_settings_list(self.settings) - self.assert_("Value: 123" in result, result) + self.assert_("TEST: 123" in result, result) def test_repr_of_a_tuple_value(self): self.settings.TEST = (123, u'abc') result = format_settings_list(self.settings) - self.assert_("Value: (123, u'abc')" in result, result) + self.assert_("TEST: (123, u'abc')" in result, result) def test_passwords_are_masked(self): self.settings.TEST_PASSWORD = u'secret' result = format_settings_list(self.settings) - self.assert_("Value: u'secret'" not in result, result) - self.assert_("Value: u'********'" in result, result) + self.assert_("TEST_PASSWORD: u'secret'" not in result, result) + self.assert_("TEST_PASSWORD: u'********'" in result, result) def test_short_values_are_not_pretty_printed(self): self.settings.FRONTEND = (u'mopidy.frontends.mpd.MpdFrontend',) result = format_settings_list(self.settings) - self.assert_("Value: (u'mopidy.frontends.mpd.MpdFrontend',)" in result, + self.assert_("FRONTEND: (u'mopidy.frontends.mpd.MpdFrontend',)" in result, result) def test_long_values_are_pretty_printed(self): self.settings.FRONTEND = (u'mopidy.frontends.mpd.MpdFrontend', u'mopidy.frontends.lastfm.LastfmFrontend') result = format_settings_list(self.settings) - self.assert_("""FRONTEND: - Value: - (u'mopidy.frontends.mpd.MpdFrontend', - u'mopidy.frontends.lastfm.LastfmFrontend')""" in result, result) + self.assert_("""FRONTEND: + (u'mopidy.frontends.mpd.MpdFrontend', + u'mopidy.frontends.lastfm.LastfmFrontend')""" in result, result) From 67787188371b2286a602f135f6baae25816bae87 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Thu, 19 May 2011 22:38:16 +0200 Subject: [PATCH 4/5] Remove 'Settings:' label and indentation of all settings --- mopidy/utils/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mopidy/utils/settings.py b/mopidy/utils/settings.py index 0a8dbb1a..cd8bd940 100644 --- a/mopidy/utils/settings.py +++ b/mopidy/utils/settings.py @@ -141,7 +141,7 @@ def list_settings_optparse_callback(*args): option. """ from mopidy import settings - print u'Settings: %s' % indent(format_settings_list(settings), places=2) + print format_settings_list(settings) sys.exit(0) def format_settings_list(settings): From 7d7fb8d9069666eb5f5f038ba37048581c9e588c Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Thu, 19 May 2011 22:44:31 +0200 Subject: [PATCH 5/5] Compare default passwords with the unmasked current password --- mopidy/utils/settings.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mopidy/utils/settings.py b/mopidy/utils/settings.py index cd8bd940..2bd6e6f3 100644 --- a/mopidy/utils/settings.py +++ b/mopidy/utils/settings.py @@ -149,8 +149,8 @@ def format_settings_list(settings): lines = [] for (key, value) in sorted(settings.current.iteritems()): default_value = settings.default.get(key) - value = mask_value_if_secret(key, value) - lines.append(u'%s: %s' % (key, indent(pformat(value), places=2))) + masked_value = mask_value_if_secret(key, value) + lines.append(u'%s: %s' % (key, indent(pformat(masked_value), places=2))) if value != default_value and default_value is not None: lines.append(u' Default: %s' % indent(pformat(default_value), places=4))