fix: black
This commit is contained in:
parent
0c9c1e2224
commit
7c88f7a139
33 changed files with 244 additions and 169 deletions
|
|
@ -12,8 +12,7 @@
|
|||
#
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
"""Configuration management library written in python
|
||||
"""
|
||||
"""Configuration management library written in python"""
|
||||
from .function import (
|
||||
calc_value,
|
||||
calc_value_property_help,
|
||||
|
|
|
|||
176
tiramisu/api.py
176
tiramisu/api.py
|
|
@ -141,19 +141,22 @@ class CommonTiramisu(TiramisuHelp):
|
|||
raise ConfigError(str(err))
|
||||
if id(self._subconfig.config_bag) != id(self._config_bag):
|
||||
subconfig = self._subconfig
|
||||
self._subconfig = subconfig.__class__(option=subconfig.option,
|
||||
index=subconfig.index,
|
||||
path=subconfig.path,
|
||||
config_bag=self._config_bag,
|
||||
parent=subconfig.parent,
|
||||
identifiers=subconfig.identifiers,
|
||||
identifier=None,
|
||||
true_path=subconfig.true_path,
|
||||
properties=subconfig.properties,
|
||||
validate_properties=False,
|
||||
check_dynamic_without_identifiers=False,
|
||||
)
|
||||
self._subconfig.is_self_dynamic_without_identifiers = subconfig.is_self_dynamic_without_identifiers
|
||||
self._subconfig = subconfig.__class__(
|
||||
option=subconfig.option,
|
||||
index=subconfig.index,
|
||||
path=subconfig.path,
|
||||
config_bag=self._config_bag,
|
||||
parent=subconfig.parent,
|
||||
identifiers=subconfig.identifiers,
|
||||
identifier=None,
|
||||
true_path=subconfig.true_path,
|
||||
properties=subconfig.properties,
|
||||
validate_properties=False,
|
||||
check_dynamic_without_identifiers=False,
|
||||
)
|
||||
self._subconfig.is_self_dynamic_without_identifiers = (
|
||||
subconfig.is_self_dynamic_without_identifiers
|
||||
)
|
||||
else:
|
||||
self._subconfig._length = None
|
||||
if not self._subconfig:
|
||||
|
|
@ -189,7 +192,11 @@ def option_type(types):
|
|||
return func(self, options_bag, *args[1:], **kwargs)
|
||||
self._set_subconfig()
|
||||
if (
|
||||
"allow_dynoption" not in types and not ("dynoption_or_uncalculated" in types and kwargs.get("uncalculated", False) is True)
|
||||
"allow_dynoption" not in types
|
||||
and not (
|
||||
"dynoption_or_uncalculated" in types
|
||||
and kwargs.get("uncalculated", False) is True
|
||||
)
|
||||
) and self._subconfig.is_dynamic_without_identifiers:
|
||||
raise AttributeOptionError(self._subconfig.path, "option-dynamic")
|
||||
|
||||
|
|
@ -237,7 +244,13 @@ def option_type(types):
|
|||
self.__class__.__name__, func.__name__
|
||||
)
|
||||
raise ConfigError(msg)
|
||||
if self._index is None and ("with_index" in types or ("with_index_or_uncalculated" in types and kwargs.get("uncalculated", False) is False)):
|
||||
if self._index is None and (
|
||||
"with_index" in types
|
||||
or (
|
||||
"with_index_or_uncalculated" in types
|
||||
and kwargs.get("uncalculated", False) is False
|
||||
)
|
||||
):
|
||||
msg = _(
|
||||
"please specify index with a follower option ({0}.{1})"
|
||||
).format(self.__class__.__name__, func.__name__)
|
||||
|
|
@ -280,7 +293,7 @@ class CommonTiramisuOption(CommonTiramisu):
|
|||
path: str,
|
||||
index: Optional[int],
|
||||
config_bag: ConfigBag,
|
||||
subconfig: Optional[SubConfig]=None,
|
||||
subconfig: Optional[SubConfig] = None,
|
||||
) -> None:
|
||||
self._path = path
|
||||
self._index = index
|
||||
|
|
@ -458,7 +471,11 @@ class _TiramisuOptionOptionDescription:
|
|||
):
|
||||
if subconfig.properties is None:
|
||||
subconfig.properties = undefined
|
||||
if is_default and subconfig.config_bag.context.get_owner(subconfig) != owners.default:
|
||||
if (
|
||||
is_default
|
||||
and subconfig.config_bag.context.get_owner(subconfig)
|
||||
!= owners.default
|
||||
):
|
||||
continue
|
||||
options.append(
|
||||
TiramisuOption(
|
||||
|
|
@ -471,7 +488,11 @@ class _TiramisuOptionOptionDescription:
|
|||
for subconfig in context.get_dynamic_from_dyn_option(
|
||||
self._subconfig, option
|
||||
):
|
||||
if is_default and subconfig.config_bag.context.get_owner(subconfig) != owners.default:
|
||||
if (
|
||||
is_default
|
||||
and subconfig.config_bag.context.get_owner(subconfig)
|
||||
!= owners.default
|
||||
):
|
||||
continue
|
||||
options.append(
|
||||
TiramisuOption(
|
||||
|
|
@ -495,17 +516,21 @@ class _TiramisuOptionOptionDescription:
|
|||
current_indexes = [None]
|
||||
for current_index in current_indexes:
|
||||
t_option = TiramisuOption(
|
||||
option.impl_getpath(),
|
||||
current_index,
|
||||
self._config_bag,
|
||||
allow_dynoption=uncalculated,
|
||||
)
|
||||
option.impl_getpath(),
|
||||
current_index,
|
||||
self._config_bag,
|
||||
allow_dynoption=uncalculated,
|
||||
)
|
||||
t_option._set_subconfig()
|
||||
subconfig = t_option._subconfig
|
||||
if is_default and subconfig.config_bag.context.get_owner(subconfig) != owners.default:
|
||||
if (
|
||||
is_default
|
||||
and subconfig.config_bag.context.get_owner(subconfig)
|
||||
!= owners.default
|
||||
):
|
||||
continue
|
||||
options.append(
|
||||
t_option,
|
||||
t_option,
|
||||
)
|
||||
return options
|
||||
|
||||
|
|
@ -630,7 +655,10 @@ class _TiramisuOptionOptionDescription:
|
|||
dynconfig = None
|
||||
_subconfig = subconfig
|
||||
while not dynconfig:
|
||||
if _subconfig.option.impl_is_optiondescription() and _subconfig.option.impl_is_dynoptiondescription():
|
||||
if (
|
||||
_subconfig.option.impl_is_optiondescription()
|
||||
and _subconfig.option.impl_is_dynoptiondescription()
|
||||
):
|
||||
dynconfig = _subconfig
|
||||
else:
|
||||
_subconfig = _subconfig.parent
|
||||
|
|
@ -649,18 +677,30 @@ class _TiramisuOptionOptionDescription:
|
|||
"""
|
||||
identifiers = []
|
||||
while True:
|
||||
if subconfig.option.impl_is_optiondescription() and subconfig.option.impl_is_dynoptiondescription():
|
||||
if (
|
||||
subconfig.option.impl_is_optiondescription()
|
||||
and subconfig.option.impl_is_dynoptiondescription()
|
||||
):
|
||||
if not subconfig.is_self_dynamic_without_identifiers:
|
||||
new_identifiers = [subconfig.identifiers[-1]]
|
||||
else:
|
||||
new_identifiers = subconfig.option.get_identifiers(subconfig.parent, uncalculated=uncalculated, convert=convert)
|
||||
new_identifiers = subconfig.option.get_identifiers(
|
||||
subconfig.parent, uncalculated=uncalculated, convert=convert
|
||||
)
|
||||
if isinstance(new_identifiers, Calculation):
|
||||
if identifiers:
|
||||
identifiers = [[new_identifiers] + old_identifiers for old_identifiers in identifiers]
|
||||
identifiers = [
|
||||
[new_identifiers] + old_identifiers
|
||||
for old_identifiers in identifiers
|
||||
]
|
||||
else:
|
||||
identifiers = [new_identifiers]
|
||||
elif identifiers:
|
||||
identifiers = [[identifier] + old_identifiers for identifier in new_identifiers for old_identifiers in identifiers]
|
||||
identifiers = [
|
||||
[identifier] + old_identifiers
|
||||
for identifier in new_identifiers
|
||||
for old_identifiers in identifiers
|
||||
]
|
||||
else:
|
||||
identifiers = [[identifier] for identifier in new_identifiers]
|
||||
subconfig = subconfig.parent
|
||||
|
|
@ -682,7 +722,10 @@ class _TiramisuOptionOptionDescription:
|
|||
dynconfig = None
|
||||
_subconfig = subconfig
|
||||
while not dynconfig:
|
||||
if _subconfig.option.impl_is_optiondescription() and _subconfig.option.impl_is_dynoptiondescription():
|
||||
if (
|
||||
_subconfig.option.impl_is_optiondescription()
|
||||
and _subconfig.option.impl_is_dynoptiondescription()
|
||||
):
|
||||
dynconfig = _subconfig
|
||||
_subconfig = _subconfig.parent
|
||||
return dynconfig.option.get_identifiers(
|
||||
|
|
@ -809,10 +852,7 @@ class TiramisuOptionOwner(CommonTiramisuOption):
|
|||
"""Is option has defaut value"""
|
||||
subconfig = self._subconfig
|
||||
s_properties = subconfig.properties
|
||||
if (
|
||||
"frozen" in s_properties
|
||||
and "force_default_on_freeze" in s_properties
|
||||
):
|
||||
if "frozen" in s_properties and "force_default_on_freeze" in s_properties:
|
||||
return True
|
||||
context = self._config_bag.context
|
||||
subconfig = context._get(
|
||||
|
|
@ -844,7 +884,13 @@ class TiramisuOptionProperty(CommonTiramisuOption):
|
|||
_validate_properties = False
|
||||
|
||||
@option_type(
|
||||
["option", "optiondescription", "with_index_or_uncalculated", "symlink", "allow_dynoption"]
|
||||
[
|
||||
"option",
|
||||
"optiondescription",
|
||||
"with_index_or_uncalculated",
|
||||
"symlink",
|
||||
"allow_dynoption",
|
||||
]
|
||||
)
|
||||
def get(
|
||||
self,
|
||||
|
|
@ -1065,7 +1111,15 @@ class TiramisuOptionValue(CommonTiramisuOption, _TiramisuODGet):
|
|||
|
||||
_validate_properties = True
|
||||
|
||||
@option_type(["option", "symlink", "with_index", "optiondescription", "dynoption_or_uncalculated"])
|
||||
@option_type(
|
||||
[
|
||||
"option",
|
||||
"symlink",
|
||||
"with_index",
|
||||
"optiondescription",
|
||||
"dynoption_or_uncalculated",
|
||||
]
|
||||
)
|
||||
def get(
|
||||
self,
|
||||
*,
|
||||
|
|
@ -1129,7 +1183,13 @@ class TiramisuOptionValue(CommonTiramisuOption, _TiramisuODGet):
|
|||
values.reset(self._subconfig)
|
||||
|
||||
@option_type(
|
||||
["option", "with_or_without_index", "symlink", "dont_validate_property", "dynoption_or_uncalculated"]
|
||||
[
|
||||
"option",
|
||||
"with_or_without_index",
|
||||
"symlink",
|
||||
"dont_validate_property",
|
||||
"dynoption_or_uncalculated",
|
||||
]
|
||||
)
|
||||
def default(
|
||||
self,
|
||||
|
|
@ -1338,7 +1398,7 @@ class TiramisuOption(
|
|||
if subfunc in ["forcepermissive", "unrestraint", "nowarnings"]:
|
||||
if subfunc == "unrestraint" and self._config_bag.is_unrestraint:
|
||||
return self
|
||||
#if self._orig_config_bags:
|
||||
# if self._orig_config_bags:
|
||||
# msg = _(
|
||||
# "do not use unrestraint, nowarnings or forcepermissive together"
|
||||
# )
|
||||
|
|
@ -1428,6 +1488,8 @@ class TiramisuOption(
|
|||
if self._tiramisu_dict is None: # pragma: no cover
|
||||
self._load_dict()
|
||||
return self._tiramisu_dict.set_updates(body)
|
||||
|
||||
|
||||
#
|
||||
# def forcepermissive(self):
|
||||
# self._set_subconfig()
|
||||
|
|
@ -1502,20 +1564,25 @@ class TiramisuContextValue(TiramisuConfig, _TiramisuODGet):
|
|||
only_mandatory=True,
|
||||
):
|
||||
if id(subconfig.config_bag) != id(config_bag):
|
||||
old_is_dynamic_without_identifiers = subconfig.is_self_dynamic_without_identifiers
|
||||
subconfig = subconfig.__class__(option=subconfig.option,
|
||||
index=subconfig.index,
|
||||
path=subconfig.path,
|
||||
config_bag=config_bag,
|
||||
parent=subconfig.parent,
|
||||
identifiers=subconfig.identifiers,
|
||||
identifier=None,
|
||||
true_path=subconfig.true_path,
|
||||
properties=subconfig.properties,
|
||||
validate_properties=False,
|
||||
check_dynamic_without_identifiers=False,
|
||||
)
|
||||
subconfig.is_self_dynamic_without_identifiers = old_is_dynamic_without_identifiers
|
||||
old_is_dynamic_without_identifiers = (
|
||||
subconfig.is_self_dynamic_without_identifiers
|
||||
)
|
||||
subconfig = subconfig.__class__(
|
||||
option=subconfig.option,
|
||||
index=subconfig.index,
|
||||
path=subconfig.path,
|
||||
config_bag=config_bag,
|
||||
parent=subconfig.parent,
|
||||
identifiers=subconfig.identifiers,
|
||||
identifier=None,
|
||||
true_path=subconfig.true_path,
|
||||
properties=subconfig.properties,
|
||||
validate_properties=False,
|
||||
check_dynamic_without_identifiers=False,
|
||||
)
|
||||
subconfig.is_self_dynamic_without_identifiers = (
|
||||
old_is_dynamic_without_identifiers
|
||||
)
|
||||
else:
|
||||
subconfig._length = None
|
||||
options.append(
|
||||
|
|
@ -2229,6 +2296,7 @@ class TiramisuAPI(TiramisuHelp):
|
|||
class ConfigProp(TiramisuAPI, TiramisuContextOption):
|
||||
pass
|
||||
|
||||
|
||||
class Config(TiramisuAPI, TiramisuContextOption):
|
||||
"""Root config object that enables us to handle the configuration options"""
|
||||
|
||||
|
|
@ -2255,6 +2323,8 @@ class Config(TiramisuAPI, TiramisuContextOption):
|
|||
permissives=permissives,
|
||||
)
|
||||
super().__init__(config_bag)
|
||||
|
||||
|
||||
#
|
||||
# def __del__(self):
|
||||
# try:
|
||||
|
|
|
|||
|
|
@ -157,9 +157,9 @@ class ParamDynOption(ParamOption):
|
|||
)
|
||||
if not isinstance(identifiers, (list, Calculation)):
|
||||
raise Exception(
|
||||
_("identifiers in ParamDynOption must be a list or a calculation, not {0}").format(
|
||||
identifiers
|
||||
)
|
||||
_(
|
||||
"identifiers in ParamDynOption must be a list or a calculation, not {0}"
|
||||
).format(identifiers)
|
||||
)
|
||||
if not isinstance(optional, bool):
|
||||
raise Exception(
|
||||
|
|
@ -628,21 +628,26 @@ def manager_callback(
|
|||
properties = config_bag.context.get_settings().getproperties(
|
||||
subconfig,
|
||||
uncalculated=True,
|
||||
) - {'validator', 'mandatory', 'empty'}
|
||||
) - {"validator", "mandatory", "empty"}
|
||||
for subconfig_ in subconfigs:
|
||||
if subconfig.path == subconfig_.path:
|
||||
values.append(orig_value)
|
||||
else:
|
||||
subconfig_.properties = properties
|
||||
values.append(get_value(
|
||||
config_bag,
|
||||
subconfig_,
|
||||
param,
|
||||
True,
|
||||
))
|
||||
values.append(
|
||||
get_value(
|
||||
config_bag,
|
||||
subconfig_,
|
||||
param,
|
||||
True,
|
||||
)
|
||||
)
|
||||
if callback.__name__ not in FUNCTION_WAITING_FOR_DICT:
|
||||
return values
|
||||
return {"name": search_option.impl_get_display_name(subconfig), "value": values}
|
||||
return {
|
||||
"name": search_option.impl_get_display_name(subconfig),
|
||||
"value": values,
|
||||
}
|
||||
else:
|
||||
value = calc_self(
|
||||
param,
|
||||
|
|
@ -779,7 +784,9 @@ def manager_callback(
|
|||
or param.raisepropertyerror
|
||||
):
|
||||
raise err from err
|
||||
raise ConfigError(str(err), subconfig=subconfig) from err
|
||||
raise ConfigError(
|
||||
str(err), subconfig=subconfig
|
||||
) from err
|
||||
parents = new_parents
|
||||
if subconfigs_is_a_list:
|
||||
subconfigs = parents
|
||||
|
|
@ -882,18 +889,19 @@ def carry_out_calculation(
|
|||
config_bag = config_bag.copy()
|
||||
config_bag.set_permissive()
|
||||
old_is_dynamic_without_identifiers = subconfig.is_dynamic_without_identifiers
|
||||
subconfig = subconfig.__class__(option=subconfig.option,
|
||||
index=subconfig.index,
|
||||
path=subconfig.path,
|
||||
config_bag=config_bag,
|
||||
parent=subconfig.parent,
|
||||
identifiers=subconfig.identifiers,
|
||||
identifier=None,
|
||||
true_path=subconfig.true_path,
|
||||
properties=subconfig.properties,
|
||||
validate_properties=False,
|
||||
check_dynamic_without_identifiers=False,
|
||||
)
|
||||
subconfig = subconfig.__class__(
|
||||
option=subconfig.option,
|
||||
index=subconfig.index,
|
||||
path=subconfig.path,
|
||||
config_bag=config_bag,
|
||||
parent=subconfig.parent,
|
||||
identifiers=subconfig.identifiers,
|
||||
identifier=None,
|
||||
true_path=subconfig.true_path,
|
||||
properties=subconfig.properties,
|
||||
validate_properties=False,
|
||||
check_dynamic_without_identifiers=False,
|
||||
)
|
||||
subconfig.is_dynamic_without_identifiers = old_is_dynamic_without_identifiers
|
||||
if callback_params:
|
||||
for key, param in chain(
|
||||
|
|
|
|||
|
|
@ -18,8 +18,7 @@
|
|||
# the rough pypy's guys: http://codespeak.net/svn/pypy/dist/pypy/config/
|
||||
# the whole pypy projet is under MIT licence
|
||||
# ____________________________________________________________
|
||||
"""options handler global entry point
|
||||
"""
|
||||
"""options handler global entry point"""
|
||||
import weakref
|
||||
from copy import copy, deepcopy
|
||||
from typing import Optional, List, Any, Union
|
||||
|
|
@ -49,7 +48,7 @@ def get_common_path(path1, path2):
|
|||
if common_path in all_paths:
|
||||
# od.st is not the common_path of od.st_in
|
||||
all_paths.remove(common_path)
|
||||
if all_paths[0].startswith(common_path + '.'):
|
||||
if all_paths[0].startswith(common_path + "."):
|
||||
return common_path
|
||||
if common_path.endswith("."):
|
||||
return common_path[:-1]
|
||||
|
|
@ -103,9 +102,11 @@ class CCache:
|
|||
resetted_opts.append(subconfig.path)
|
||||
config_bag = subconfig.config_bag
|
||||
if not force:
|
||||
# if is_default and config_bag.context.get_owner(subconfig) != owners.default:
|
||||
# return
|
||||
for is_default, woption in subconfig.option.get_dependencies(subconfig.option):
|
||||
# if is_default and config_bag.context.get_owner(subconfig) != owners.default:
|
||||
# return
|
||||
for is_default, woption in subconfig.option.get_dependencies(
|
||||
subconfig.option
|
||||
):
|
||||
option = woption()
|
||||
if option.issubdyn():
|
||||
# it's an option in dynoptiondescription, remove cache for all generated option
|
||||
|
|
@ -343,7 +344,13 @@ class SubConfig:
|
|||
self.config_bag.context.get_settings().validate_properties(self)
|
||||
self._properties = undefined
|
||||
self.config_bag.context.get_settings().validate_properties(self)
|
||||
if validate_properties and self.apply_requires and self.option.impl_is_optiondescription() and self.path and self.properties is not None:
|
||||
if (
|
||||
validate_properties
|
||||
and self.apply_requires
|
||||
and self.option.impl_is_optiondescription()
|
||||
and self.path
|
||||
and self.properties is not None
|
||||
):
|
||||
settings = config_bag.context.get_settings()
|
||||
self.transitive_properties = settings.calc_transitive_properties(
|
||||
self,
|
||||
|
|
@ -526,7 +533,10 @@ class SubConfig:
|
|||
)
|
||||
if check_index and index is not None:
|
||||
if option.impl_is_optiondescription() or not option.impl_is_follower():
|
||||
raise ConfigError("index must be set only with a follower option", subconfig=subsubconfig,)
|
||||
raise ConfigError(
|
||||
"index must be set only with a follower option",
|
||||
subconfig=subsubconfig,
|
||||
)
|
||||
length = self.get_length_leadership()
|
||||
if index >= length:
|
||||
raise LeadershipError(
|
||||
|
|
@ -567,9 +577,11 @@ class SubConfig:
|
|||
None,
|
||||
validate_properties=False,
|
||||
)
|
||||
subconfig.is_self_dynamic_without_identifiers = self.is_self_dynamic_without_identifiers
|
||||
#FIXME
|
||||
#self._length = len(cconfig_bag.context.get_value(subconfig))
|
||||
subconfig.is_self_dynamic_without_identifiers = (
|
||||
self.is_self_dynamic_without_identifiers
|
||||
)
|
||||
# FIXME
|
||||
# self._length = len(cconfig_bag.context.get_value(subconfig))
|
||||
length = len(cconfig_bag.context.get_value(subconfig))
|
||||
return length
|
||||
|
||||
|
|
@ -681,7 +693,9 @@ class SubConfig:
|
|||
true_path=self.true_path,
|
||||
validate_properties=False,
|
||||
)
|
||||
subconfig.is_self_dynamic_without_identifiers = self.is_self_dynamic_without_identifiers
|
||||
subconfig.is_self_dynamic_without_identifiers = (
|
||||
self.is_self_dynamic_without_identifiers
|
||||
)
|
||||
return subconfig
|
||||
|
||||
|
||||
|
|
@ -1073,6 +1087,7 @@ class _Config(CCache):
|
|||
|
||||
class _CommonConfig(_Config):
|
||||
"abstract base class for the Config, KernelGroupConfig and the KernelMetaConfig"
|
||||
|
||||
__slots__ = (
|
||||
"_impl_values",
|
||||
"_impl_values_cache",
|
||||
|
|
@ -1905,9 +1920,7 @@ class KernelMetaConfig(KernelMixConfig):
|
|||
if descr is None:
|
||||
descr = child.get_description()
|
||||
if child.impl_getname() is None:
|
||||
raise ConfigError(
|
||||
_("children in MetaConfig must have name")
|
||||
)
|
||||
raise ConfigError(_("children in MetaConfig must have name"))
|
||||
elif descr is not child.get_description():
|
||||
raise ValueError(
|
||||
_(
|
||||
|
|
|
|||
|
|
@ -39,9 +39,9 @@ TiramisuErrorCode = Literal[
|
|||
def display_list(
|
||||
lst,
|
||||
*,
|
||||
separator: str="and",
|
||||
add_quote: bool=False,
|
||||
sort: bool=True,
|
||||
separator: str = "and",
|
||||
add_quote: bool = False,
|
||||
sort: bool = True,
|
||||
) -> str():
|
||||
if not lst:
|
||||
return '""'
|
||||
|
|
@ -212,7 +212,7 @@ class ConfigError(Exception):
|
|||
exp,
|
||||
*,
|
||||
prefix: Optional[str] = None,
|
||||
subconfig: Optional["Subconfig"]=None,
|
||||
subconfig: Optional["Subconfig"] = None,
|
||||
):
|
||||
super().__init__(exp)
|
||||
self.err_msg = exp
|
||||
|
|
@ -230,6 +230,7 @@ class ConfigError(Exception):
|
|||
|
||||
class ConflictError(Exception):
|
||||
"duplicate options are present in a single config"
|
||||
|
||||
pass
|
||||
|
||||
|
||||
|
|
@ -308,6 +309,7 @@ class LeadershipError(Exception):
|
|||
|
||||
class ConstError(TypeError):
|
||||
"no uniq value in _NameSpace"
|
||||
|
||||
pass
|
||||
|
||||
|
||||
|
|
@ -426,7 +428,8 @@ class Errors:
|
|||
display_name = option.impl_get_display_name(subconfig, with_quote=True)
|
||||
if original_error:
|
||||
raise ConfigError(
|
||||
message.format(display_name, original_error, *extra_keys), subconfig=subconfig,
|
||||
message.format(display_name, original_error, *extra_keys),
|
||||
subconfig=subconfig,
|
||||
) from original_error
|
||||
raise ConfigError(message.format(display_name, extra_keys), subconfig=subconfig)
|
||||
|
||||
|
|
|
|||
|
|
@ -12,8 +12,7 @@
|
|||
#
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
"""some functions to validates or calculates value
|
||||
"""
|
||||
"""some functions to validates or calculates value"""
|
||||
from typing import Any, List, Optional
|
||||
from operator import add, mul, sub, truediv
|
||||
from ipaddress import ip_address, ip_interface, ip_network
|
||||
|
|
|
|||
|
|
@ -18,8 +18,7 @@
|
|||
# the rough pypy's guys: http://codespeak.net/svn/pypy/dist/pypy/config/
|
||||
# the whole pypy projet is under MIT licence
|
||||
# ____________________________________________________________
|
||||
"""all official option
|
||||
"""
|
||||
"""all official option"""
|
||||
from .optiondescription import OptionDescription
|
||||
from .dynoptiondescription import DynOptionDescription
|
||||
from .leadership import Leadership
|
||||
|
|
|
|||
|
|
@ -18,8 +18,7 @@
|
|||
# the rough pypy's guys: http://codespeak.net/svn/pypy/dist/pypy/config/
|
||||
# the whole pypy projet is under MIT licence
|
||||
# ____________________________________________________________
|
||||
"""base option
|
||||
"""
|
||||
"""base option"""
|
||||
from typing import FrozenSet, Set, Any, List, Optional, Dict
|
||||
import weakref
|
||||
from itertools import chain
|
||||
|
|
@ -27,7 +26,13 @@ from itertools import chain
|
|||
|
||||
from ..i18n import _
|
||||
from ..setting import undefined
|
||||
from ..autolib import Calculation, ParamOption, ParamSelfOption, ParamInformation, ParamSelfInformation
|
||||
from ..autolib import (
|
||||
Calculation,
|
||||
ParamOption,
|
||||
ParamSelfOption,
|
||||
ParamInformation,
|
||||
ParamSelfInformation,
|
||||
)
|
||||
|
||||
STATIC_TUPLE = frozenset()
|
||||
|
||||
|
|
@ -390,10 +395,7 @@ class BaseOption(Base):
|
|||
self.value_dependency(value, is_identifier)
|
||||
|
||||
def value_dependency(
|
||||
self,
|
||||
value: Any,
|
||||
is_identifier: bool = False,
|
||||
type_: str = 'default'
|
||||
self, value: Any, is_identifier: bool = False, type_: str = "default"
|
||||
) -> Any:
|
||||
if not isinstance(is_identifier, bool):
|
||||
raise Exception()
|
||||
|
|
|
|||
|
|
@ -18,8 +18,7 @@
|
|||
# the rough pypy's guys: http://codespeak.net/svn/pypy/dist/pypy/config/
|
||||
# the whole pypy projet is under MIT licence
|
||||
# ____________________________________________________________
|
||||
"""BoolOption
|
||||
"""
|
||||
"""BoolOption"""
|
||||
|
||||
from ..i18n import _
|
||||
from .option import Option
|
||||
|
|
|
|||
|
|
@ -18,8 +18,7 @@
|
|||
# the rough pypy's guys: http://codespeak.net/svn/pypy/dist/pypy/config/
|
||||
# the whole pypy projet is under MIT licence
|
||||
# ____________________________________________________________
|
||||
"""BroadcastOption
|
||||
"""
|
||||
"""BroadcastOption"""
|
||||
from ipaddress import ip_address
|
||||
|
||||
from ..i18n import _
|
||||
|
|
|
|||
|
|
@ -18,8 +18,7 @@
|
|||
# the rough pypy's guys: http://codespeak.net/svn/pypy/dist/pypy/config/
|
||||
# the whole pypy projet is under MIT licence
|
||||
# ____________________________________________________________
|
||||
"""ChoiceOption
|
||||
"""
|
||||
"""ChoiceOption"""
|
||||
from typing import Any
|
||||
from itertools import chain
|
||||
|
||||
|
|
|
|||
|
|
@ -18,8 +18,7 @@
|
|||
# the rough pypy's guys: http://codespeak.net/svn/pypy/dist/pypy/config/
|
||||
# the whole pypy projet is under MIT licence
|
||||
# ____________________________________________________________
|
||||
"""DateOption
|
||||
"""
|
||||
"""DateOption"""
|
||||
from datetime import datetime
|
||||
|
||||
from ..i18n import _
|
||||
|
|
|
|||
|
|
@ -18,8 +18,7 @@
|
|||
# the rough pypy's guys: http://codespeak.net/svn/pypy/dist/pypy/config/
|
||||
# the whole pypy projet is under MIT licence
|
||||
# ____________________________________________________________
|
||||
"""DomainnameOption
|
||||
"""
|
||||
"""DomainnameOption"""
|
||||
import re
|
||||
import socket
|
||||
from ipaddress import ip_interface
|
||||
|
|
|
|||
|
|
@ -18,8 +18,7 @@
|
|||
# the rough pypy's guys: http://codespeak.net/svn/pypy/dist/pypy/config/
|
||||
# the whole pypy projet is under MIT licence
|
||||
# ____________________________________________________________
|
||||
"""DynOptionDescription
|
||||
"""
|
||||
"""DynOptionDescription"""
|
||||
import re
|
||||
import weakref
|
||||
from typing import List, Any, Optional, Dict
|
||||
|
|
|
|||
|
|
@ -18,8 +18,7 @@
|
|||
# the rough pypy's guys: http://codespeak.net/svn/pypy/dist/pypy/config/
|
||||
# the whole pypy projet is under MIT licence
|
||||
# ____________________________________________________________
|
||||
"""EmailOption
|
||||
"""
|
||||
"""EmailOption"""
|
||||
import re
|
||||
|
||||
from ..i18n import _
|
||||
|
|
|
|||
|
|
@ -18,8 +18,7 @@
|
|||
# the rough pypy's guys: http://codespeak.net/svn/pypy/dist/pypy/config/
|
||||
# the whole pypy projet is under MIT licence
|
||||
# ____________________________________________________________
|
||||
"""FilenameOption
|
||||
"""
|
||||
"""FilenameOption"""
|
||||
from pathlib import Path
|
||||
|
||||
from ..i18n import _
|
||||
|
|
|
|||
|
|
@ -18,8 +18,7 @@
|
|||
# the rough pypy's guys: http://codespeak.net/svn/pypy/dist/pypy/config/
|
||||
# the whole pypy projet is under MIT licence
|
||||
# ____________________________________________________________
|
||||
"""FloatOption
|
||||
"""
|
||||
"""FloatOption"""
|
||||
|
||||
from ..i18n import _
|
||||
from .option import Option
|
||||
|
|
|
|||
|
|
@ -18,8 +18,7 @@
|
|||
# the rough pypy's guys: http://codespeak.net/svn/pypy/dist/pypy/config/
|
||||
# the whole pypy projet is under MIT licence
|
||||
# ____________________________________________________________
|
||||
"""IntOption
|
||||
"""
|
||||
"""IntOption"""
|
||||
|
||||
from ..i18n import _
|
||||
from .option import Option
|
||||
|
|
@ -27,6 +26,7 @@ from .option import Option
|
|||
|
||||
class IntOption(Option):
|
||||
"represents a choice of an integer"
|
||||
|
||||
__slots__ = tuple()
|
||||
_type = "integer"
|
||||
_t_type = _("integer")
|
||||
|
|
|
|||
|
|
@ -18,8 +18,7 @@
|
|||
# the rough pypy's guys: http://codespeak.net/svn/pypy/dist/pypy/config/
|
||||
# the whole pypy projet is under MIT licence
|
||||
# ____________________________________________________________
|
||||
"""IPOption
|
||||
"""
|
||||
"""IPOption"""
|
||||
from ipaddress import ip_address, ip_interface
|
||||
|
||||
from ..i18n import _
|
||||
|
|
|
|||
|
|
@ -74,7 +74,9 @@ class Leadership(OptionDescription):
|
|||
self._check_default_value(child)
|
||||
# remove empty property for follower
|
||||
if not child.impl_is_submulti():
|
||||
child._properties = frozenset(child._properties - {"empty", "unique"})
|
||||
child._properties = frozenset(
|
||||
child._properties - {"empty", "unique"}
|
||||
)
|
||||
followers.append(child)
|
||||
child._add_dependency(self, "leadership")
|
||||
child._leadership = weakref.ref(self)
|
||||
|
|
|
|||
|
|
@ -18,8 +18,7 @@
|
|||
# the rough pypy's guys: http://codespeak.net/svn/pypy/dist/pypy/config/
|
||||
# the whole pypy projet is under MIT licence
|
||||
# ____________________________________________________________
|
||||
"""MACOption
|
||||
"""
|
||||
"""MACOption"""
|
||||
import re
|
||||
|
||||
from ..i18n import _
|
||||
|
|
|
|||
|
|
@ -18,8 +18,7 @@
|
|||
# the rough pypy's guys: http://codespeak.net/svn/pypy/dist/pypy/config/
|
||||
# the whole pypy projet is under MIT licence
|
||||
# ____________________________________________________________
|
||||
"""NetmaskOption
|
||||
"""
|
||||
"""NetmaskOption"""
|
||||
from ipaddress import ip_network
|
||||
from ..i18n import _
|
||||
from .stroption import StrOption
|
||||
|
|
|
|||
|
|
@ -18,8 +18,7 @@
|
|||
# the rough pypy's guys: http://codespeak.net/svn/pypy/dist/pypy/config/
|
||||
# the whole pypy projet is under MIT licence
|
||||
# ____________________________________________________________
|
||||
"""NetworkOption
|
||||
"""
|
||||
"""NetworkOption"""
|
||||
from ipaddress import ip_network
|
||||
|
||||
from ..i18n import _
|
||||
|
|
@ -29,6 +28,7 @@ from .stroption import StrOption
|
|||
|
||||
class NetworkOption(IPOption):
|
||||
"represents the choice of a network"
|
||||
|
||||
__slots__ = tuple()
|
||||
_type = "network address"
|
||||
_t_type = _("network address")
|
||||
|
|
|
|||
|
|
@ -18,8 +18,7 @@
|
|||
# the rough pypy's guys: http://codespeak.net/svn/pypy/dist/pypy/config/
|
||||
# the whole pypy projet is under MIT licence
|
||||
# ____________________________________________________________
|
||||
"""OptionDescription
|
||||
"""
|
||||
"""OptionDescription"""
|
||||
import weakref
|
||||
from typing import Optional, Iterator, Union, List, Dict
|
||||
|
||||
|
|
@ -29,7 +28,12 @@ from ..setting import ConfigBag, groups, undefined, owners, Undefined
|
|||
from .baseoption import BaseOption
|
||||
|
||||
# from .syndynoption import SubDynOptionDescription, SynDynOptionDescription
|
||||
from ..error import ConfigError, ConflictError, AttributeOptionError, PropertiesOptionError
|
||||
from ..error import (
|
||||
ConfigError,
|
||||
ConflictError,
|
||||
AttributeOptionError,
|
||||
PropertiesOptionError,
|
||||
)
|
||||
|
||||
|
||||
class CacheOptionDescription(BaseOption):
|
||||
|
|
|
|||
|
|
@ -18,8 +18,7 @@
|
|||
# the rough pypy's guys: http://codespeak.net/svn/pypy/dist/pypy/config/
|
||||
# the whole pypy projet is under MIT licence
|
||||
# ____________________________________________________________
|
||||
"""PasswordOption
|
||||
"""
|
||||
"""PasswordOption"""
|
||||
|
||||
from ..i18n import _
|
||||
from ..error import display_list
|
||||
|
|
|
|||
|
|
@ -18,8 +18,7 @@
|
|||
# the rough pypy's guys: http://codespeak.net/svn/pypy/dist/pypy/config/
|
||||
# the whole pypy projet is under MIT licence
|
||||
# ____________________________________________________________
|
||||
"""PermissionsOption
|
||||
"""
|
||||
"""PermissionsOption"""
|
||||
import re
|
||||
|
||||
from ..i18n import _
|
||||
|
|
|
|||
|
|
@ -18,8 +18,7 @@
|
|||
# the rough pypy's guys: http://codespeak.net/svn/pypy/dist/pypy/config/
|
||||
# the whole pypy projet is under MIT licence
|
||||
# ____________________________________________________________
|
||||
"""PortOption
|
||||
"""
|
||||
"""PortOption"""
|
||||
from ..i18n import _
|
||||
from .stroption import StrOption
|
||||
|
||||
|
|
|
|||
|
|
@ -18,8 +18,7 @@
|
|||
# the rough pypy's guys: http://codespeak.net/svn/pypy/dist/pypy/config/
|
||||
# the whole pypy projet is under MIT licence
|
||||
# ____________________________________________________________
|
||||
"""StrOption and RegexpOption
|
||||
"""
|
||||
"""StrOption and RegexpOption"""
|
||||
from typing import Any
|
||||
|
||||
from ..i18n import _
|
||||
|
|
|
|||
|
|
@ -18,8 +18,7 @@
|
|||
# the rough pypy's guys: http://codespeak.net/svn/pypy/dist/pypy/config/
|
||||
# the whole pypy projet is under MIT licence
|
||||
# ____________________________________________________________
|
||||
"""SymLinkOption link to an other option
|
||||
"""
|
||||
"""SymLinkOption link to an other option"""
|
||||
from typing import Any, Optional, Dict
|
||||
from .baseoption import BaseOption, valid_name
|
||||
from ..i18n import _
|
||||
|
|
|
|||
|
|
@ -18,8 +18,7 @@
|
|||
# the rough pypy's guys: http://codespeak.net/svn/pypy/dist/pypy/config/
|
||||
# the whole pypy projet is under MIT licence
|
||||
# ____________________________________________________________
|
||||
"""URLOption to check url value
|
||||
"""
|
||||
"""URLOption to check url value"""
|
||||
import re
|
||||
from typing import Any, Optional, List, Dict
|
||||
|
||||
|
|
|
|||
|
|
@ -18,8 +18,7 @@
|
|||
# the rough pypy's guys: http://codespeak.net/svn/pypy/dist/pypy/config/
|
||||
# the whole pypy projet is under MIT licence
|
||||
# ____________________________________________________________
|
||||
"""UsernameOption or GroupnameOption to check unix username/group value
|
||||
"""
|
||||
"""UsernameOption or GroupnameOption to check unix username/group value"""
|
||||
import re
|
||||
|
||||
from ..i18n import _
|
||||
|
|
|
|||
|
|
@ -144,8 +144,7 @@ RW_REMOVE = frozenset(
|
|||
|
||||
|
||||
PROPERTIES_MAKE_SENSE = (
|
||||
"cache"
|
||||
"demoting_error_warning",
|
||||
"cache" "demoting_error_warning",
|
||||
"disabled",
|
||||
"empty",
|
||||
"everything_frozen",
|
||||
|
|
@ -378,6 +377,7 @@ forbidden_owners = (owners.default, owners.forced) # pylint: disable=no-member
|
|||
# ____________________________________________________________
|
||||
class Settings:
|
||||
"``config.Config()``'s configuration options settings"
|
||||
|
||||
__slots__ = (
|
||||
"_properties",
|
||||
"_permissives",
|
||||
|
|
|
|||
|
|
@ -122,8 +122,8 @@ class Values:
|
|||
# get it
|
||||
value = self.get_default_value(subconfig)
|
||||
if owner == owners.default:
|
||||
if(
|
||||
"force_store_value" in subconfig.config_bag.properties
|
||||
if (
|
||||
"force_store_value" in subconfig.config_bag.properties
|
||||
and "force_store_value" in self_properties
|
||||
):
|
||||
value = self.get_default_value(subconfig)
|
||||
|
|
@ -163,9 +163,7 @@ class Values:
|
|||
msubconfig = self._get_modified_parent(subconfig)
|
||||
if msubconfig is not None:
|
||||
# retrieved value from parent config
|
||||
return msubconfig.config_bag.context.get_values().getowner(
|
||||
msubconfig
|
||||
)
|
||||
return msubconfig.config_bag.context.get_values().getowner(msubconfig)
|
||||
return owners.default
|
||||
|
||||
def get_default_value(
|
||||
|
|
@ -342,7 +340,7 @@ class Values:
|
|||
subconfig,
|
||||
value,
|
||||
)
|
||||
# parent._length = len(value)
|
||||
# parent._length = len(value)
|
||||
leader.follower_force_store_value(
|
||||
value,
|
||||
parent,
|
||||
|
|
@ -569,14 +567,11 @@ class Values:
|
|||
:returns: a `setting.owners.Owner` object
|
||||
"""
|
||||
self_properties = subconfig.properties
|
||||
if (
|
||||
"frozen" in self_properties
|
||||
and "force_default_on_freeze" in self_properties
|
||||
):
|
||||
if "frozen" in self_properties and "force_default_on_freeze" in self_properties:
|
||||
return owners.default
|
||||
setting_properties = subconfig.config_bag.properties
|
||||
if (
|
||||
"force_store_value" in setting_properties
|
||||
"force_store_value" in setting_properties
|
||||
and "force_store_value" in self_properties
|
||||
):
|
||||
self.set_force_store_value(subconfig)
|
||||
|
|
|
|||
Loading…
Reference in a new issue