1
0
Fork 0
mirror of https://github.com/yweber/lodel2.git synced 2026-03-24 03:52:01 +01:00
This commit is contained in:
prieto 2016-04-21 17:01:12 +02:00
commit 48165e0fcb
3 changed files with 47 additions and 9 deletions

View file

@ -55,7 +55,7 @@ class SettingsLoader(object):
# @param mandatory bool # @param mandatory bool
# @return the option # @return the option
def getoption(self,section,keyname,validator,default_value=None,mandatory=False): def getoption(self,section,keyname,validator,default_value=None,mandatory=False):
conf=copy.copy(self.__conf) conf=self.__conf
if section in conf: if section in conf:
sec=conf[section] sec=conf[section]
if keyname in sec: if keyname in sec:
@ -68,11 +68,15 @@ class SettingsLoader(object):
return option return option
elif default_value is None and mandatory: elif default_value is None and mandatory:
raise SettingsError("Default value mandatory for option %s" % keyname) raise SettingsError("Default value mandatory for option %s" % keyname)
sec['keyname']=dict() sec[keyname]=dict()
sec['keyname']['value'] = default_value sec[keyname]['value'] = default_value
sec['keyname']['file'] = 'default_value' sec[keyname]['file'] = 'default_value'
return default_value return default_value
else: else:
conf[section]=dict()
conf[section][keyname]=dict()
conf[section][keyname]['value'] = default_value
conf[section][keyname]['file'] = 'default_value'
return default_value return default_value
##@brief Sets option in a config section. Writes in the conf file ##@brief Sets option in a config section. Writes in the conf file
# @param section str : name of the section # @param section str : name of the section
@ -82,16 +86,19 @@ class SettingsLoader(object):
# @return the option # @return the option
def setoption(self,section,keyname,value,validator): def setoption(self,section,keyname,value,validator):
f_conf=copy.copy(self.__conf[section][keyname]['file']) f_conf=copy.copy(self.__conf[section][keyname]['file'])
if f_conf == 'default_value':
f_conf = self.__conf_path + '/generated.ini'
conf=self.__conf conf=self.__conf
conf[section][keyname] = value conf[section][keyname] = value
if f_conf == 'default_value':
f_conf = self.conf_path + '/generated.ini'
config = configparser.ConfigParser() config = configparser.ConfigParser()
config.read(f_conf) config.read(f_conf)
config[section]={}
config[section][keyname] = validator(value) config[section][keyname] = validator(value)
with open(f_conf, 'w') as configfile: with open(f_conf, 'w') as configfile:
config.write(configfile) config.write(configfile)
##@brief Saves new partial configuration. Writes in the conf files corresponding ##@brief Saves new partial configuration. Writes in the conf files corresponding
# @param sections dict # @param sections dict
# @param validators dict of callable : takes one argument value and raises validation fail # @param validators dict of callable : takes one argument value and raises validation fail

View file

@ -0,0 +1,5 @@
[lodel2.foo.bar]
foo = 42
foobar = hello world
foo_bar = foobar
foo.bar = barfoo

View file

@ -1,10 +1,13 @@
#-*- coding: utf-8 -*- #-*- coding: utf-8 -*-
import unittest import unittest
import os.path
from lodel.settings.utils import * from lodel.settings.utils import *
from lodel.settings.settings_loader import SettingsLoader from lodel.settings.settings_loader import SettingsLoader
#A dummy validator that only returns the value #A dummy validator that only returns the value
def dummy_validator(value): return value def dummy_validator(value): return value
#A dummy validator that always fails #A dummy validator that always fails
@ -86,8 +89,8 @@ class SettingsLoaderTestCase(unittest.TestCase):
value = loader.getoption('lodel2.foo.bar', 'foofoofoo', dummy_validator, 'hello 42', False) value = loader.getoption('lodel2.foo.bar', 'foofoofoo', dummy_validator, 'hello 42', False)
self.assertEqual(value, 'hello 42') self.assertEqual(value, 'hello 42')
# for non existing section in file # for non existing section in file
# value = loader.getoption('lodel2.foofoo', 'foofoofoo', dummy_validator, 'hello 42', False) value = loader.getoption('lodel2.foofoo', 'foofoofoo', dummy_validator, 'hello 42', False)
# self.assertEqual(value, 'hello 42') self.assertEqual(value, 'hello 42')
def test_getoption_complex(self): def test_getoption_complex(self):
""" Testing behavior of getoption with less simple files & confs """ """ Testing behavior of getoption with less simple files & confs """
@ -226,3 +229,26 @@ class SettingsLoaderTestCase(unittest.TestCase):
self.assertEqual(option,'toto') self.assertEqual(option,'toto')
option=loader.getoption('lodel2.A.e','a',dummy_validator) option=loader.getoption('lodel2.A.e','a',dummy_validator)
self.assertEqual(option,'ft') self.assertEqual(option,'ft')
def test_setoption_default_value(self):
loader = SettingsLoader('tests/settings/settings_examples/conf_setdef.d')
# for non existing keys in file
value = loader.getoption('lodel2.foo.bar', 'foofoofoo', dummy_validator, 'hello 42', False)
self.assertEqual(value, 'hello 42')
# for non existing section in file
value = loader.getoption('lodel2.foofoo', 'foofoofoo', dummy_validator, 'hello 42', False)
self.assertEqual(value, 'hello 42')
loader.setoption('lodel2.foo.bar', 'foofoofoo', 'test ok', dummy_validator)
loader.setoption('lodel2.foofoo', 'foofoofoo', 'test ok', dummy_validator)
self.assertTrue(os.path.isfile('tests/settings/settings_examples/conf_setdef.d/generated.ini'))
loader = SettingsLoader('tests/settings/settings_examples/conf_setdef.d')
value = loader.getoption('lodel2.foofoo', 'foofoofoo', dummy_validator)
self.assertEqual(value, 'test ok')
value = loader.getoption('lodel2.foo.bar', 'foofoofoo', dummy_validator)
self.assertEqual(value, 'test ok')
os.remove('tests/settings/settings_examples/conf_setdef.d/generated.ini')