Merge pull request #98 from jodal/feature/91-pprint-settings-list

feature/91-pprint-settings-list
This commit is contained in:
Thomas Adamcik 2011-05-19 14:12:18 -07:00
commit f0f986a425
2 changed files with 57 additions and 8 deletions

View File

@ -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
@ -140,19 +141,22 @@ def list_settings_optparse_callback(*args):
option.
"""
from mopidy import settings
print format_settings_list(settings)
sys.exit(0)
def format_settings_list(settings):
errors = settings.get_errors()
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:' % key)
lines.append(u' Value: %s' % repr(value))
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' % repr(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])
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:

View File

@ -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,48 @@ 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_("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_("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_("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_("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_("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:
(u'mopidy.frontends.mpd.MpdFrontend',
u'mopidy.frontends.lastfm.LastfmFrontend')""" in result, result)