config.py: separate getattr and get_subconfig
This commit is contained in:
parent
1c2bbc59fd
commit
ebeaee620b
|
@ -104,7 +104,7 @@ def test_unknown_option():
|
||||||
od2 = OptionDescription('od', '', [od1])
|
od2 = OptionDescription('od', '', [od1])
|
||||||
api = getapi(Config(od2))
|
api = getapi(Config(od2))
|
||||||
# test is an option, not an optiondescription
|
# test is an option, not an optiondescription
|
||||||
raises(AttributeError, "api.option('od.test.unknown').value.get()")
|
raises(TypeError, "api.option('od.test.unknown').value.get()")
|
||||||
# unknown is an unknown option
|
# unknown is an unknown option
|
||||||
raises(AttributeError, "api.option('unknown').value.get()")
|
raises(AttributeError, "api.option('unknown').value.get()")
|
||||||
# unknown is an unknown option
|
# unknown is an unknown option
|
||||||
|
|
|
@ -156,7 +156,7 @@ def test_slots_config():
|
||||||
'a',
|
'a',
|
||||||
None,
|
None,
|
||||||
ConfigBag(c))
|
ConfigBag(c))
|
||||||
sc = c.getattr('a', option_bag)
|
sc = c.get_subconfig('a', option_bag)
|
||||||
assert isinstance(sc, SubConfig)
|
assert isinstance(sc, SubConfig)
|
||||||
raises(AttributeError, "sc.x = 1")
|
raises(AttributeError, "sc.x = 1")
|
||||||
raises(AttributeError, "sc.cfgimpl_x = 1")
|
raises(AttributeError, "sc.cfgimpl_x = 1")
|
||||||
|
|
|
@ -652,7 +652,7 @@ class TiramisuOption(CommonTiramisu):
|
||||||
fullpath=False):
|
fullpath=False):
|
||||||
"""return dict with path as key and value for an optiondescription (only for optiondescription)"""
|
"""return dict with path as key and value for an optiondescription (only for optiondescription)"""
|
||||||
self._get_option()
|
self._get_option()
|
||||||
return self.config_bag.config.getattr(self._path,
|
return self.config_bag.config.get_subconfig(self._path,
|
||||||
self.option_bag).make_dict(config_bag=self.config_bag,
|
self.option_bag).make_dict(config_bag=self.config_bag,
|
||||||
flatten=flatten,
|
flatten=flatten,
|
||||||
fullpath=fullpath,
|
fullpath=fullpath,
|
||||||
|
@ -732,6 +732,10 @@ class TiramisuOption(CommonTiramisu):
|
||||||
path,
|
path,
|
||||||
None,
|
None,
|
||||||
self.config_bag)
|
self.config_bag)
|
||||||
|
if opt.impl_is_optiondescription():
|
||||||
|
self.subconfig.get_subconfig(name,
|
||||||
|
option_bag)
|
||||||
|
else:
|
||||||
self.subconfig.getattr(name,
|
self.subconfig.getattr(name,
|
||||||
option_bag)
|
option_bag)
|
||||||
|
|
||||||
|
@ -743,7 +747,7 @@ class TiramisuOption(CommonTiramisu):
|
||||||
path,
|
path,
|
||||||
None,
|
None,
|
||||||
self.config_bag)
|
self.config_bag)
|
||||||
subconfig = self.subconfig.getattr(name,
|
subconfig = self.subconfig.get_subconfig(name,
|
||||||
option_bag)
|
option_bag)
|
||||||
for opt in option.impl_getchildren(self.config_bag):
|
for opt in option.impl_getchildren(self.config_bag):
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -64,8 +64,12 @@ class SubConfig(object):
|
||||||
if descr is not None and (not isinstance(descr, (BaseOption, SynDynOptionDescription)) or not descr.impl_is_optiondescription()):
|
if descr is not None and (not isinstance(descr, (BaseOption, SynDynOptionDescription)) or not descr.impl_is_optiondescription()):
|
||||||
error = True
|
error = True
|
||||||
if error:
|
if error:
|
||||||
raise TypeError(_('descr must be an optiondescription, not {0}'
|
try:
|
||||||
).format(type(descr)))
|
msg = descr.impl_get_displayname()
|
||||||
|
except AttributeError:
|
||||||
|
msg = descr
|
||||||
|
raise TypeError(_('"{0}" must be an optiondescription, not an {1}'
|
||||||
|
).format(msg, type(descr)))
|
||||||
self._impl_descr = descr
|
self._impl_descr = descr
|
||||||
self._impl_context = context
|
self._impl_context = context
|
||||||
self._impl_path = subpath
|
self._impl_path = subpath
|
||||||
|
@ -212,7 +216,7 @@ class SubConfig(object):
|
||||||
config_bag)
|
config_bag)
|
||||||
if fromconsistency is not None:
|
if fromconsistency is not None:
|
||||||
option_bag.fromconsistency = fromconsistency
|
option_bag.fromconsistency = fromconsistency
|
||||||
self = self.getattr(step,
|
self = self.get_subconfig(step,
|
||||||
option_bag)
|
option_bag)
|
||||||
if not isinstance(self, SubConfig):
|
if not isinstance(self, SubConfig):
|
||||||
raise AttributeError(_('unknown option {}').format(path[-1]))
|
raise AttributeError(_('unknown option {}').format(path[-1]))
|
||||||
|
@ -285,6 +289,30 @@ class SubConfig(object):
|
||||||
subpath = self._impl_path + '.' + name
|
subpath = self._impl_path + '.' + name
|
||||||
return subpath
|
return subpath
|
||||||
|
|
||||||
|
def get_subconfig(self,
|
||||||
|
name,
|
||||||
|
option_bag):
|
||||||
|
if '.' in name:
|
||||||
|
if option_bag.fromconsistency:
|
||||||
|
fromconsistency = option_bag.fromconsistency.copy()
|
||||||
|
else:
|
||||||
|
fromconsistency = None
|
||||||
|
self, name = self.cfgimpl_get_home_by_path(name,
|
||||||
|
option_bag.config_bag,
|
||||||
|
fromconsistency)
|
||||||
|
elif option_bag.fromconsistency:
|
||||||
|
fromconsistency = option_bag.fromconsistency.copy()
|
||||||
|
else:
|
||||||
|
fromconsistency = None
|
||||||
|
|
||||||
|
if option_bag.config_bag.setting_properties:
|
||||||
|
self.cfgimpl_get_settings().validate_properties(option_bag)
|
||||||
|
return SubConfig(option_bag.option,
|
||||||
|
self._impl_context,
|
||||||
|
option_bag.config_bag,
|
||||||
|
option_bag.path,
|
||||||
|
fromconsistency)
|
||||||
|
|
||||||
def getattr(self,
|
def getattr(self,
|
||||||
name,
|
name,
|
||||||
option_bag):
|
option_bag):
|
||||||
|
@ -318,16 +346,6 @@ class SubConfig(object):
|
||||||
|
|
||||||
if config_bag.setting_properties:
|
if config_bag.setting_properties:
|
||||||
self.cfgimpl_get_settings().validate_properties(option_bag)
|
self.cfgimpl_get_settings().validate_properties(option_bag)
|
||||||
if option.impl_is_optiondescription():
|
|
||||||
if option_bag.fromconsistency:
|
|
||||||
fromconsistency = option_bag.fromconsistency.copy()
|
|
||||||
else:
|
|
||||||
fromconsistency = None
|
|
||||||
return SubConfig(option,
|
|
||||||
self._impl_context,
|
|
||||||
config_bag,
|
|
||||||
option_bag.path,
|
|
||||||
fromconsistency)
|
|
||||||
|
|
||||||
if option.impl_is_master_slaves('slave'):
|
if option.impl_is_master_slaves('slave'):
|
||||||
length = self.cfgimpl_get_length_slave(option_bag)
|
length = self.cfgimpl_get_length_slave(option_bag)
|
||||||
|
@ -546,7 +564,8 @@ class SubConfig(object):
|
||||||
fullpath=False):
|
fullpath=False):
|
||||||
try:
|
try:
|
||||||
option = option_bag.option
|
option = option_bag.option
|
||||||
if not option.impl_is_optiondescription() and option.impl_is_master_slaves('slave'):
|
if not option.impl_is_optiondescription():
|
||||||
|
if option.impl_is_master_slaves('slave'):
|
||||||
ret = []
|
ret = []
|
||||||
length = self.cfgimpl_get_length_slave(option_bag)
|
length = self.cfgimpl_get_length_slave(option_bag)
|
||||||
if length:
|
if length:
|
||||||
|
@ -563,6 +582,9 @@ class SubConfig(object):
|
||||||
else:
|
else:
|
||||||
ret = self.getattr(name,
|
ret = self.getattr(name,
|
||||||
option_bag)
|
option_bag)
|
||||||
|
else:
|
||||||
|
ret = self.get_subconfig(name,
|
||||||
|
option_bag)
|
||||||
except PropertiesOptionError:
|
except PropertiesOptionError:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -593,7 +593,7 @@ class Values(object):
|
||||||
path,
|
path,
|
||||||
None,
|
None,
|
||||||
config_bag)
|
config_bag)
|
||||||
subconfig = config.getattr(name,
|
subconfig = config.get_subconfig(name,
|
||||||
option_bag)
|
option_bag)
|
||||||
except PropertiesOptionError as err:
|
except PropertiesOptionError as err:
|
||||||
pass
|
pass
|
||||||
|
|
Loading…
Reference in New Issue