From 854efa35ea65b7589845a22236b73d6f8f2b02e0 Mon Sep 17 00:00:00 2001 From: maxkoryukov Date: Tue, 19 Jan 2016 23:56:04 +0500 Subject: [PATCH] style fix for settings.py --- couchpotato/core/settings.py | 46 +++++++++++++++------------------ couchpotato/core/settings_test.py | 54 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+), 25 deletions(-) diff --git a/couchpotato/core/settings.py b/couchpotato/core/settings.py index 978b37c..6e9993f 100644 --- a/couchpotato/core/settings.py +++ b/couchpotato/core/settings.py @@ -331,38 +331,34 @@ class Settings(object): return { 'success' : False, } - else: - from couchpotato.environment import Env - soft_chroot = Env.get('softchroot') - - if self.getType(section, option) == 'directory': - value = soft_chroot.chroot2abs(value) + from couchpotato.environment import Env + soft_chroot = Env.get('softchroot') - if self.getType(section, option) == 'directories': - import json - value = json.loads(value) - if not (value and isinstance(value, list)): - value = [] - value = map(soft_chroot.chroot2abs, value) - value = self.directories_delimiter.join(value) + if self.getType(section, option) == 'directory': + value = soft_chroot.chroot2abs(value) - # See if a value handler is attached, use that as value - new_value = fireEvent('setting.save.%s.%s' % (section, option), value, single = True) + if self.getType(section, option) == 'directories': + import json + value = json.loads(value) + if not (value and isinstance(value, list)): + value = [] + value = map(soft_chroot.chroot2abs, value) + value = self.directories_delimiter.join(value) - self.set(section, option, (new_value if new_value else value).encode('unicode_escape')) - self.save() + # See if a value handler is attached, use that as value + new_value = fireEvent('setting.save.%s.%s' % (section, option), value, single = True) - # After save (for re-interval etc) - fireEvent('setting.save.%s.%s.after' % (section, option), single = True) - fireEvent('setting.save.%s.*.after' % section, single = True) + self.set(section, option, (new_value if new_value else value).encode('unicode_escape')) + self.save() - return { - 'success': True - } + # After save (for re-interval etc) + fireEvent('setting.save.%s.%s.after' % (section, option), single = True) + fireEvent('setting.save.%s.*.after' % section, single = True) - # unreachable code: - return None + return { + 'success': True + } def isSectionReadable(self, section): meta = 'section_hidden' + self.optionMetaSuffix() diff --git a/couchpotato/core/settings_test.py b/couchpotato/core/settings_test.py index 034ddd3..8ddbd6c 100644 --- a/couchpotato/core/settings_test.py +++ b/couchpotato/core/settings_test.py @@ -22,6 +22,11 @@ class DoNotUseMe: # props: s.log = Mock() + + # subobjects + s.p = Mock() + s.p.getboolean = Mock(return_value=True) + s.p.has_option = Mock class SettingsSaveWritableNonWritable(TestCase): def setUp(self): @@ -94,3 +99,52 @@ class SettingsSaveWritableNonWritable(TestCase): # lets check, that 'set'-method was not called: self.assertFalse(mock_set.called, 'Method `set` was called') mock_is_w.assert_called_with(section, option) + + + +class OptionMetaSuite(TestCase): + """ tests for ro rw hidden options """ + + def setUp(self): + self.s = Settings() + self.meta = self.s.optionMetaSuffix() + + # hide real config-parser: + self.s.p = Mock() + + def test_no_meta_option(self): + s = self.s + + section = 'core' + option = 'url' + + option_meta = option + self.meta + # setup mock + s.p.getboolean = Mock(return_value=True) + + # there is no META-record for our option: + s.p.has_option = Mock(side_effect=lambda s,o: not (s==section and o==option_meta) ) + + # by default all options are writable and readable + self.assertTrue ( s.isOptionWritable(section, option) ) + self.assertTrue ( s.isOptionReadable(section, option) ) + + def test_non_writable(self): + s = self.s + + section = 'core' + option = 'url' + + def mock_get_meta_ro (s,o): + if (s==section and o==option_meta): + return 'ro' + return 11 + + option_meta = option + self.meta + # setup mock + s.p.has_option = Mock( return_value = True ) + s.p.get = Mock( side_effect = mock_get_meta_ro) + + # by default all options are writable and readable + self.assertFalse ( s.isOptionWritable(section, option) ) + self.assertTrue ( s.isOptionReadable(section, option) )