Reviewed-on: #34 Co-authored-by: Emmanuel Garette <egarette@silique.fr> Co-committed-by: Emmanuel Garette <egarette@silique.fr>
This commit is contained in:
parent
ec86795768
commit
ea93bc55fc
13 changed files with 126 additions and 4 deletions
|
@ -394,6 +394,24 @@ Copy a variable in another:
|
||||||
type: variable
|
type: variable
|
||||||
variable: _.my_variable
|
variable: _.my_variable
|
||||||
|
|
||||||
|
Copy the default value from a variable, means copy type, params and multi attribute too if not define in second variable.
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
---
|
||||||
|
version: 1.1
|
||||||
|
my_variable:
|
||||||
|
multi: true
|
||||||
|
type: domainname
|
||||||
|
params:
|
||||||
|
allow_ip: true
|
||||||
|
my_calculated_variable:
|
||||||
|
default:
|
||||||
|
type: variable
|
||||||
|
variable: _.var1
|
||||||
|
|
||||||
|
Here my_calculated_variable is a domainname variable with parameter allow_ip=True and multi to true.
|
||||||
|
|
||||||
Copy one variable to another if the source has no `property` problem:
|
Copy one variable to another if the source has no `property` problem:
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
|
|
|
@ -30,7 +30,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
from rougail.i18n import _
|
from rougail.i18n import _
|
||||||
from rougail.error import DictConsistencyError
|
from rougail.error import DictConsistencyError
|
||||||
from rougail.utils import get_realpath
|
|
||||||
from rougail.annotator.variable import Walk
|
from rougail.annotator.variable import Walk
|
||||||
from rougail.object_model import VariableCalculation
|
from rougail.object_model import VariableCalculation
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
from rougail.i18n import _
|
from rougail.i18n import _
|
||||||
from rougail.error import DictConsistencyError
|
from rougail.error import DictConsistencyError
|
||||||
from rougail.object_model import Calculation
|
from rougail.object_model import Calculation, VariableCalculation
|
||||||
from tiramisu.error import display_list
|
from tiramisu.error import display_list
|
||||||
|
|
||||||
|
|
||||||
|
@ -83,11 +83,16 @@ class Annotator(Walk): # pylint: disable=R0903
|
||||||
|
|
||||||
def convert_variable(self):
|
def convert_variable(self):
|
||||||
"""convert variable"""
|
"""convert variable"""
|
||||||
|
for variable in self.get_variables():
|
||||||
|
if variable.version != "1.0":
|
||||||
|
if variable.type == "symlink":
|
||||||
|
continue
|
||||||
|
self._convert_variable_inference(variable)
|
||||||
for variable in self.get_variables():
|
for variable in self.get_variables():
|
||||||
if variable.type == "symlink":
|
if variable.type == "symlink":
|
||||||
continue
|
continue
|
||||||
if variable.version != "1.0":
|
if variable.version != "1.0":
|
||||||
self._convert_variable_inference(variable)
|
self._default_variable_copy_informations(variable)
|
||||||
if variable.multi is None:
|
if variable.multi is None:
|
||||||
variable.multi = False
|
variable.multi = False
|
||||||
if variable.type is None:
|
if variable.type is None:
|
||||||
|
@ -115,12 +120,35 @@ class Annotator(Walk): # pylint: disable=R0903
|
||||||
tested_value = variable.default
|
tested_value = variable.default
|
||||||
variable.type = self.basic_types.get(type(tested_value), None)
|
variable.type = self.basic_types.get(type(tested_value), None)
|
||||||
# variable has no multi attribute
|
# variable has no multi attribute
|
||||||
if variable.multi is None:
|
if variable.multi is None and not (variable.type is None and isinstance(variable.default, VariableCalculation)):
|
||||||
if variable.path in self.objectspace.leaders:
|
if variable.path in self.objectspace.leaders:
|
||||||
variable.multi = True
|
variable.multi = True
|
||||||
else:
|
else:
|
||||||
variable.multi = isinstance(variable.default, list)
|
variable.multi = isinstance(variable.default, list)
|
||||||
|
|
||||||
|
def _default_variable_copy_informations(
|
||||||
|
self,
|
||||||
|
variable,
|
||||||
|
) -> None:
|
||||||
|
# if a variable has a variable as default value, that means the type/params or multi should has same value
|
||||||
|
if variable.type is not None or not isinstance(variable.default, VariableCalculation):
|
||||||
|
return
|
||||||
|
# copy type and params
|
||||||
|
calculated_variable_path = variable.default.variable
|
||||||
|
calculated_variable, suffix = self.objectspace.paths.get_with_dynamic(
|
||||||
|
calculated_variable_path, variable.default.path_prefix, variable.path, variable.version, variable.namespace, variable.xmlfiles
|
||||||
|
)
|
||||||
|
variable.type = calculated_variable.type
|
||||||
|
if variable.params is None and calculated_variable.params is not None:
|
||||||
|
variable.params = calculated_variable.params
|
||||||
|
# copy multi attribut
|
||||||
|
if variable.multi is None:
|
||||||
|
calculated_path = calculated_variable.path
|
||||||
|
if calculated_path in self.objectspace.leaders and variable.path in self.objectspace.followers and calculated_path.rsplit('.')[0] == variable.path.rsplit('.')[0]:
|
||||||
|
variable.multi = False
|
||||||
|
else:
|
||||||
|
variable.multi = calculated_variable.multi
|
||||||
|
|
||||||
def _convert_variable(
|
def _convert_variable(
|
||||||
self,
|
self,
|
||||||
variable: dict,
|
variable: dict,
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
---
|
||||||
|
version: 1.1
|
||||||
|
var1:
|
||||||
|
description: a first variable
|
||||||
|
multi: true
|
||||||
|
type: domainname
|
||||||
|
params:
|
||||||
|
allow_ip: true
|
||||||
|
var2:
|
||||||
|
description: a second variable
|
||||||
|
default:
|
||||||
|
type: variable
|
||||||
|
variable: _.var1
|
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"rougail.var1": {
|
||||||
|
"owner": "default",
|
||||||
|
"value": []
|
||||||
|
},
|
||||||
|
"rougail.var2": {
|
||||||
|
"owner": "default",
|
||||||
|
"value": []
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"rougail.var1": [],
|
||||||
|
"rougail.var2": []
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"rougail.var1": {
|
||||||
|
"owner": "default",
|
||||||
|
"value": []
|
||||||
|
},
|
||||||
|
"rougail.var2": {
|
||||||
|
"owner": "default",
|
||||||
|
"value": []
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
["rougail.var1", "rougail.var2"]
|
|
@ -0,0 +1,11 @@
|
||||||
|
from tiramisu import *
|
||||||
|
from tiramisu.setting import ALLOWED_LEADER_PROPERTIES
|
||||||
|
from rougail.tiramisu import func, dict_env, load_functions, ConvertDynOptionDescription
|
||||||
|
load_functions('tests/dictionaries/../eosfunc/test.py')
|
||||||
|
ALLOWED_LEADER_PROPERTIES.add("basic")
|
||||||
|
ALLOWED_LEADER_PROPERTIES.add("standard")
|
||||||
|
ALLOWED_LEADER_PROPERTIES.add("advanced")
|
||||||
|
option_2 = DomainnameOption(name="var1", doc="a first variable", multi=True, type="domainname", allow_ip=True, properties=frozenset({"basic", "mandatory", "notempty"}), informations={'type': 'domainname'})
|
||||||
|
option_3 = DomainnameOption(name="var2", doc="a second variable", multi=True, default=Calculation(func['calc_value'], Params((ParamOption(option_2)))), type="domainname", allow_ip=True, properties=frozenset({"mandatory", "notempty", "standard"}), informations={'type': 'domainname'})
|
||||||
|
optiondescription_1 = OptionDescription(name="rougail", doc="Rougail", children=[option_2, option_3], properties=frozenset({"basic"}))
|
||||||
|
option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[optiondescription_1])
|
|
@ -0,0 +1,16 @@
|
||||||
|
from tiramisu import *
|
||||||
|
from tiramisu.setting import ALLOWED_LEADER_PROPERTIES
|
||||||
|
from rougail.tiramisu import func, dict_env, load_functions, ConvertDynOptionDescription
|
||||||
|
load_functions('tests/dictionaries/../eosfunc/test.py')
|
||||||
|
ALLOWED_LEADER_PROPERTIES.add("basic")
|
||||||
|
ALLOWED_LEADER_PROPERTIES.add("standard")
|
||||||
|
ALLOWED_LEADER_PROPERTIES.add("advanced")
|
||||||
|
option_3 = DomainnameOption(name="var1", doc="a first variable", multi=True, type="domainname", allow_ip=True, properties=frozenset({"basic", "mandatory", "notempty"}), informations={'type': 'domainname'})
|
||||||
|
option_4 = DomainnameOption(name="var2", doc="a second variable", multi=True, default=Calculation(func['calc_value'], Params((ParamOption(option_3)))), type="domainname", allow_ip=True, properties=frozenset({"mandatory", "notempty", "standard"}), informations={'type': 'domainname'})
|
||||||
|
optiondescription_2 = OptionDescription(name="rougail", doc="Rougail", children=[option_3, option_4], properties=frozenset({"basic"}))
|
||||||
|
optiondescription_1 = OptionDescription(name="1", doc="1", children=[optiondescription_2], properties=frozenset({"basic"}))
|
||||||
|
option_7 = DomainnameOption(name="var1", doc="a first variable", multi=True, type="domainname", allow_ip=True, properties=frozenset({"basic", "mandatory", "notempty"}), informations={'type': 'domainname'})
|
||||||
|
option_8 = DomainnameOption(name="var2", doc="a second variable", multi=True, default=Calculation(func['calc_value'], Params((ParamOption(option_7)))), type="domainname", allow_ip=True, properties=frozenset({"mandatory", "notempty", "standard"}), informations={'type': 'domainname'})
|
||||||
|
optiondescription_6 = OptionDescription(name="rougail", doc="Rougail", children=[option_7, option_8], properties=frozenset({"basic"}))
|
||||||
|
optiondescription_5 = OptionDescription(name="2", doc="2", children=[optiondescription_6], properties=frozenset({"basic"}))
|
||||||
|
option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[optiondescription_1, optiondescription_5])
|
|
@ -0,0 +1,10 @@
|
||||||
|
from tiramisu import *
|
||||||
|
from tiramisu.setting import ALLOWED_LEADER_PROPERTIES
|
||||||
|
from rougail.tiramisu import func, dict_env, load_functions, ConvertDynOptionDescription
|
||||||
|
load_functions('tests/dictionaries/../eosfunc/test.py')
|
||||||
|
ALLOWED_LEADER_PROPERTIES.add("basic")
|
||||||
|
ALLOWED_LEADER_PROPERTIES.add("standard")
|
||||||
|
ALLOWED_LEADER_PROPERTIES.add("advanced")
|
||||||
|
option_1 = DomainnameOption(name="var1", doc="a first variable", multi=True, type="domainname", allow_ip=True, properties=frozenset({"basic", "mandatory", "notempty"}), informations={'type': 'domainname'})
|
||||||
|
option_2 = DomainnameOption(name="var2", doc="a second variable", multi=True, default=Calculation(func['calc_value'], Params((ParamOption(option_1)))), type="domainname", allow_ip=True, properties=frozenset({"mandatory", "notempty", "standard"}), informations={'type': 'domainname'})
|
||||||
|
option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[option_1, option_2])
|
|
@ -46,8 +46,10 @@ test_multi = True
|
||||||
#test_multi = False
|
#test_multi = False
|
||||||
test_base = test_multi
|
test_base = test_multi
|
||||||
#test_base = True
|
#test_base = True
|
||||||
|
#test_base = False
|
||||||
test_no_namespace = test_multi
|
test_no_namespace = test_multi
|
||||||
#test_no_namespace = True
|
#test_no_namespace = True
|
||||||
|
#test_no_namespace = False
|
||||||
|
|
||||||
ORI_DIR = getcwd()
|
ORI_DIR = getcwd()
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue