Add basic runtime setting support
This commit is contained in:
parent
53aa64d52c
commit
947b91aa5c
@ -15,6 +15,7 @@ class SettingsProxy(object):
|
||||
self.default = self._get_settings_dict_from_module(
|
||||
default_settings_module)
|
||||
self.local = self._get_local_settings()
|
||||
self.runtime = {}
|
||||
|
||||
def _get_local_settings(self):
|
||||
dotdir = os.path.expanduser(u'~/.mopidy/')
|
||||
@ -37,6 +38,7 @@ class SettingsProxy(object):
|
||||
def current(self):
|
||||
current = copy(self.default)
|
||||
current.update(self.local)
|
||||
current.update(self.runtime)
|
||||
return current
|
||||
|
||||
def __getattr__(self, attr):
|
||||
@ -49,6 +51,12 @@ class SettingsProxy(object):
|
||||
raise SettingsError(u'Setting "%s" is empty.' % attr)
|
||||
return value
|
||||
|
||||
def __setattr__(self, attr, value):
|
||||
if self._is_setting(attr):
|
||||
self.runtime[attr] = value
|
||||
else:
|
||||
super(SettingsProxy, self).__setattr__(attr, value)
|
||||
|
||||
def validate(self):
|
||||
if self.get_errors():
|
||||
logger.error(u'Settings validation errors: %s',
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
import unittest
|
||||
|
||||
from mopidy.utils.settings import validate_settings
|
||||
from mopidy import settings as default_settings_module
|
||||
from mopidy.utils.settings import validate_settings, SettingsProxy
|
||||
|
||||
class ValidateSettingsTest(unittest.TestCase):
|
||||
def setUp(self):
|
||||
@ -43,3 +44,24 @@ class ValidateSettingsTest(unittest.TestCase):
|
||||
result = validate_settings(self.defaults,
|
||||
{'FOO': '', 'BAR': ''})
|
||||
self.assertEquals(len(result), 2)
|
||||
|
||||
|
||||
class SettingsProxyTest(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.settings = SettingsProxy(default_settings_module)
|
||||
|
||||
def test_set_and_get_attr(self):
|
||||
self.settings.TEST = 'test'
|
||||
self.assertEqual(self.settings.TEST, 'test')
|
||||
|
||||
def test_setattr_updates_runtime_settings(self):
|
||||
self.settings.TEST = 'test'
|
||||
self.assert_('TEST' in self.settings.runtime)
|
||||
|
||||
def test_setattr_updates_runtime_with_value(self):
|
||||
self.settings.TEST = 'test'
|
||||
self.assertEqual(self.settings.runtime['TEST'], 'test')
|
||||
|
||||
def test_runtime_value_included_in_current(self):
|
||||
self.settings.TEST = 'test'
|
||||
self.assertEqual(self.settings.current['TEST'], 'test')
|
||||
|
||||
Loading…
Reference in New Issue
Block a user