requires could be apply to a slave and properties could be different
This commit is contained in:
@ -22,12 +22,12 @@ import re
|
||||
from types import FunctionType
|
||||
import warnings
|
||||
|
||||
from tiramisu.i18n import _
|
||||
from tiramisu.setting import log, undefined
|
||||
from tiramisu.autolib import carry_out_calculation
|
||||
from tiramisu.error import ConfigError, ValueWarning, PropertiesOptionError,\
|
||||
from ..i18n import _
|
||||
from ..setting import log, undefined
|
||||
from ..autolib import carry_out_calculation
|
||||
from ..error import ConfigError, ValueWarning, PropertiesOptionError,\
|
||||
ContextError
|
||||
from tiramisu.storage import get_storages_option
|
||||
from ..storage import get_storages_option
|
||||
|
||||
|
||||
StorageBase = get_storages_option('base')
|
||||
@ -853,10 +853,6 @@ def validate_requires_arg(requires, name):
|
||||
if not isinstance(option, Option): # pragma: optional cover
|
||||
raise ValueError(_('malformed requirements '
|
||||
'must be an option in option {0}').format(name))
|
||||
if option.impl_is_multi(): # pragma: optional cover
|
||||
raise ValueError(_('malformed requirements option {0} '
|
||||
'must not be a multi for {1}').format(
|
||||
option.impl_getname(), name))
|
||||
if expected is not None:
|
||||
try:
|
||||
option._validate(expected)
|
||||
|
@ -19,9 +19,9 @@
|
||||
# the rough pypy's guys: http://codespeak.net/svn/pypy/dist/pypy/config/
|
||||
# the whole pypy projet is under MIT licence
|
||||
# ____________________________________________________________
|
||||
from tiramisu.i18n import _
|
||||
from tiramisu.setting import log, undefined
|
||||
from tiramisu.error import SlaveError, ConfigError
|
||||
from ..i18n import _
|
||||
from ..setting import log, undefined
|
||||
from ..error import SlaveError, ConfigError, PropertiesOptionError
|
||||
from .baseoption import DynSymLinkOption, SymLinkOption, Option
|
||||
|
||||
|
||||
@ -50,8 +50,8 @@ class MasterSlaves(object):
|
||||
else:
|
||||
if child.impl_getdefault() != []:
|
||||
raise ValueError(_("not allowed default value for option {0} "
|
||||
"in group {1}").format(child.impl_getname(),
|
||||
name))
|
||||
"in group {1}").format(child.impl_getname(),
|
||||
name))
|
||||
slaves.append(child)
|
||||
if self.master is None: # pragma: optional cover
|
||||
raise ValueError(_('master group with wrong'
|
||||
@ -112,50 +112,41 @@ class MasterSlaves(object):
|
||||
for slave in self.getslaves(opt):
|
||||
if not values.is_default_owner(slave, validate_properties=False,
|
||||
validate_meta=False, index=index):
|
||||
values._get_cached_item(slave, validate=False,
|
||||
validate_properties=False
|
||||
).pop(index, force=True)
|
||||
values._get_cached_value(slave, validate=False,
|
||||
validate_properties=False
|
||||
).pop(index, force=True)
|
||||
pass
|
||||
|
||||
def getitem(self, values, opt, path, validate, force_permissive,
|
||||
force_properties, validate_properties, slave_path=undefined,
|
||||
slave_value=undefined, setting_properties=undefined, self_properties=undefined):
|
||||
slave_value=undefined, setting_properties=undefined,
|
||||
self_properties=undefined, index=None):
|
||||
if self.is_master(opt):
|
||||
return self._getmaster(values, opt, path, validate,
|
||||
force_permissive, force_properties,
|
||||
validate_properties, slave_path,
|
||||
slave_value, self_properties)
|
||||
slave_value, self_properties, index)
|
||||
else:
|
||||
return self._getslave(values, opt, path, validate,
|
||||
force_permissive, force_properties,
|
||||
validate_properties, setting_properties, self_properties)
|
||||
validate_properties, setting_properties,
|
||||
self_properties, index)
|
||||
|
||||
def _getmaster(self, values, opt, path, validate, force_permissive,
|
||||
force_properties, validate_properties, c_slave_path,
|
||||
c_slave_value, self_properties):
|
||||
c_slave_value, self_properties, index):
|
||||
value = values._get_validated_value(opt, path, validate,
|
||||
force_permissive,
|
||||
force_properties,
|
||||
validate_properties,
|
||||
self_properties=self_properties)
|
||||
if validate is True:
|
||||
self_properties=self_properties,
|
||||
index=index)
|
||||
if index is None and validate is True:
|
||||
masterlen = len(value)
|
||||
for slave in self.getslaves(opt):
|
||||
try:
|
||||
slave_path = slave.impl_getpath(values._getcontext())
|
||||
slavelen = values._p_.get_max_length(slave_path)
|
||||
#if c_slave_path == slave_path:
|
||||
# slave_value = c_slave_value
|
||||
#else:
|
||||
# slave_value = values._get_validated_value(slave,
|
||||
# slave_path,
|
||||
# False,
|
||||
# False,
|
||||
# None, False,
|
||||
# None,
|
||||
# self_properties=self_properties,
|
||||
# masterlen=masterlen)
|
||||
#slavelen = len(slave_value)
|
||||
self.validate_slave_length(masterlen, slavelen, slave.impl_getname(), opt)
|
||||
except ConfigError: # pragma: optional cover
|
||||
pass
|
||||
@ -163,7 +154,7 @@ class MasterSlaves(object):
|
||||
|
||||
def _getslave(self, values, opt, path, validate, force_permissive,
|
||||
force_properties, validate_properties, setting_properties,
|
||||
self_properties):
|
||||
self_properties, index):
|
||||
"""
|
||||
if master has length 0:
|
||||
return []
|
||||
@ -191,46 +182,43 @@ class MasterSlaves(object):
|
||||
masterlen = self.get_length(values, opt, validate, undefined,
|
||||
undefined, force_permissive,
|
||||
master=master)
|
||||
master_is_meta = values._is_meta(opt, masterp)
|
||||
#value = values._get_validated_value(opt, path, validate,
|
||||
# force_permissive,
|
||||
# force_properties,
|
||||
# validate_properties,
|
||||
# None, # not undefined
|
||||
# with_meta=master_is_meta,
|
||||
# self_properties=self_properties)
|
||||
#if slave, had values until master's one
|
||||
#path = opt.impl_getpath(context)
|
||||
#valuelen = len(value)
|
||||
#if validate:
|
||||
# self.validate_slave_length(masterlen, valuelen,
|
||||
# opt.impl_getname(), opt)
|
||||
#if valuelen < masterlen:
|
||||
|
||||
#FIXME voir si pas de plus grande valeur !
|
||||
value = values._get_multi(opt, path)
|
||||
for index in range(0, masterlen):
|
||||
#index = valuelen + num
|
||||
value.append(values._get_validated_value(opt, path, validate,
|
||||
master_is_meta = values._is_meta(master, masterp)
|
||||
multi = values._get_multi(opt, path)
|
||||
if masterlen == 0:
|
||||
if validate_properties:
|
||||
context.cfgimpl_get_settings().validate_properties(opt, False,
|
||||
False,
|
||||
value=multi,
|
||||
path=path,
|
||||
force_permissive=force_permissive,
|
||||
force_properties=force_properties,
|
||||
setting_properties=setting_properties)
|
||||
else:
|
||||
one_has_value = False
|
||||
if index is None:
|
||||
indexes = range(0, masterlen)
|
||||
else:
|
||||
indexes = [index]
|
||||
for idx in indexes:
|
||||
try:
|
||||
value = values._get_cached_value(opt, path, validate,
|
||||
force_permissive, force_properties,
|
||||
validate_properties,
|
||||
with_meta=master_is_meta,
|
||||
index=index,
|
||||
self_properties=self_properties,
|
||||
masterlen=masterlen),
|
||||
setitem=False,
|
||||
force=True,
|
||||
validate=validate)
|
||||
#FIXME hu?
|
||||
if validate_properties:
|
||||
context.cfgimpl_get_settings().validate_properties(opt, False,
|
||||
False,
|
||||
value=value,
|
||||
path=path,
|
||||
force_permissive=force_permissive,
|
||||
force_properties=force_properties,
|
||||
setting_properties=setting_properties)
|
||||
return value
|
||||
index=idx,
|
||||
# not self_properties,
|
||||
# depends to index
|
||||
#self_properties=self_properties,
|
||||
masterlen=masterlen,
|
||||
from_masterslave=True)
|
||||
multi.append(value, setitem=False, force=True, validate=validate)
|
||||
one_has_value = True
|
||||
except PropertiesOptionError, err:
|
||||
multi.append_properties_error(err)
|
||||
if not one_has_value:
|
||||
#raise last err
|
||||
raise err
|
||||
return multi
|
||||
|
||||
def setitem(self, values, opt, value, path):
|
||||
if self.is_master(opt):
|
||||
@ -241,15 +229,6 @@ class MasterSlaves(object):
|
||||
slave_path = base_path + slave.impl_getname()
|
||||
slavelen = values._p_.get_max_length(slave_path)
|
||||
self.validate_slave_length(masterlen, slavelen, slave.impl_getname(), opt)
|
||||
#slave_value = values._get_validated_value(slave,
|
||||
# slave_path,
|
||||
# False,
|
||||
# False,
|
||||
# None, False,
|
||||
# None,
|
||||
# masterlen=masterlen) # not undefined
|
||||
#slavelen = len(slave_value)
|
||||
#self.validate_slave_length(masterlen, slavelen, slave.impl_getname(), opt)
|
||||
else:
|
||||
self.validate_slave_length(self.get_length(values, opt,
|
||||
slave_path=path), len(value),
|
||||
|
@ -23,12 +23,12 @@ import re
|
||||
import sys
|
||||
from IPy import IP
|
||||
from types import FunctionType
|
||||
from tiramisu.setting import log, undefined
|
||||
from ..setting import log, undefined
|
||||
|
||||
from tiramisu.error import ConfigError, ContextError
|
||||
from tiramisu.i18n import _
|
||||
from ..error import ConfigError, ContextError
|
||||
from ..i18n import _
|
||||
from .baseoption import Option, validate_callback
|
||||
from tiramisu.autolib import carry_out_calculation
|
||||
from ..autolib import carry_out_calculation
|
||||
|
||||
|
||||
class ChoiceOption(Option):
|
||||
|
@ -22,13 +22,13 @@ from copy import copy
|
||||
import re
|
||||
|
||||
|
||||
from tiramisu.i18n import _
|
||||
from tiramisu.setting import groups, undefined # , log
|
||||
from ..i18n import _
|
||||
from ..setting import groups, undefined # , log
|
||||
from .baseoption import BaseOption, SymLinkOption, allowed_character
|
||||
from . import MasterSlaves
|
||||
from tiramisu.error import ConfigError, ConflictError
|
||||
from tiramisu.storage import get_storages_option
|
||||
from tiramisu.autolib import carry_out_calculation
|
||||
from ..error import ConfigError, ConflictError
|
||||
from ..storage import get_storages_option
|
||||
from ..autolib import carry_out_calculation
|
||||
|
||||
|
||||
StorageOptionDescription = get_storages_option('optiondescription')
|
||||
@ -135,6 +135,19 @@ class OptionDescription(BaseOption, StorageOptionDescription):
|
||||
option._set_readonly()
|
||||
if isinstance(option, OptionDescription):
|
||||
option.impl_validate_options(cache_option)
|
||||
if option.impl_getrequires() != []:
|
||||
for requires in option.impl_getrequires():
|
||||
for require in requires:
|
||||
if require[0].impl_is_multi():
|
||||
if option.impl_is_master_slaves('slave') and require[0].impl_is_master_slaves():
|
||||
if option.impl_get_master_slaves() != require[0].impl_get_master_slaves():
|
||||
raise ValueError(_('malformed requirements option {0} '
|
||||
'must be in same master/slaves for {1}').format(
|
||||
require[0].impl_getname(), option.impl_getname()))
|
||||
else:
|
||||
raise ValueError(_('malformed requirements option {0} '
|
||||
'must not be a multi for {1}').format(
|
||||
require[0].impl_getname(), option.impl_getname()))
|
||||
if init:
|
||||
if len(cache_option) != len(set(cache_option)):
|
||||
for idx in xrange(1, len(cache_option) + 1):
|
||||
|
Reference in New Issue
Block a user