Calculate the active settings dynamically, so tests can do mopidy.settings.local.clear() to get rid of local settings

This commit is contained in:
Stein Magnus Jodal 2010-08-18 13:03:24 +02:00
parent a87f7f9381
commit 1872082932

View File

@ -12,11 +12,9 @@ logger = logging.getLogger('mopidy.utils.settings')
class SettingsProxy(object):
def __init__(self, default_settings_module):
self.default_settings = self._get_settings_dict_from_module(
self.default = self._get_settings_dict_from_module(
default_settings_module)
self.local_settings = self._get_local_settings()
self.raw_settings = copy(self.default_settings)
self.raw_settings.update(self.local_settings)
self.local = self._get_local_settings()
def _get_local_settings(self):
dotdir = os.path.expanduser(u'~/.mopidy/')
@ -35,12 +33,18 @@ class SettingsProxy(object):
def _is_setting(self, name):
return name.isupper()
@property
def active(self):
active = copy(self.default)
active.update(self.local)
return active
def __getattr__(self, attr):
if not self._is_setting(attr):
return
if attr not in self.raw_settings:
if attr not in self.active:
raise SettingsError(u'Setting "%s" is not set.' % attr)
value = self.raw_settings[attr]
value = self.active[attr]
if type(value) != bool and not value:
raise SettingsError(u'Setting "%s" is empty.' % attr)
return value
@ -52,7 +56,7 @@ class SettingsProxy(object):
raise SettingsError(u'Settings validation failed.')
def get_errors(self):
return validate_settings(self.default_settings, self.local_settings)
return validate_settings(self.default, self.local)
def get_errors_as_string(self):
lines = []
@ -114,8 +118,8 @@ def list_settings_optparse_callback(*args):
from mopidy import settings
errors = settings.get_errors()
lines = []
for (key, value) in sorted(settings.raw_settings.iteritems()):
default_value = settings.default_settings.get(key)
for (key, value) in sorted(settings.active.iteritems()):
default_value = settings.default.get(key)
if key.endswith('PASSWORD'):
value = u'********'
lines.append(u'%s:' % key)