if optionnal passes an exception
This commit is contained in:
parent
2c70cf4a84
commit
28e0c2fd55
12 changed files with 134 additions and 5 deletions
|
@ -79,3 +79,15 @@ class UpgradeError(Exception):
|
|||
class NotFoundError(Exception):
|
||||
"not found error"
|
||||
pass
|
||||
|
||||
## ---- specific exceptions ----
|
||||
|
||||
class VariableCalculationDependencyError(Exception):
|
||||
"""When an 'optional=true' attribute is set, and
|
||||
the target variable doesn't exists.
|
||||
"""
|
||||
def __init__(self, msg, errno, xmlfiles):
|
||||
if xmlfiles:
|
||||
msg = _(f"{msg} in {display_xmlfiles(xmlfiles)}")
|
||||
super().__init__(msg)
|
||||
self.errno = errno
|
||||
|
|
|
@ -30,7 +30,7 @@ from pydantic import (
|
|||
ConfigDict,
|
||||
)
|
||||
from .utils import get_jinja_variable_to_param, get_realpath
|
||||
from .error import DictConsistencyError
|
||||
from .error import DictConsistencyError, VariableCalculationDependencyError
|
||||
|
||||
BASETYPE = Union[StrictBool, StrictInt, StrictFloat, StrictStr, None]
|
||||
PROPERTY_ATTRIBUTE = ["frozen", "hidden", "disabled", "mandatory"]
|
||||
|
@ -348,8 +348,12 @@ class VariableCalculation(Calculation):
|
|||
self.variable, self.path_prefix, self.path, self.version, self.namespace, self.xmlfiles
|
||||
)
|
||||
if not variable:
|
||||
msg = f'Variable not found "{self.variable}" for attribut "{self.attribute_name}" for variable "{self.path}"'
|
||||
raise DictConsistencyError(msg, 88, self.xmlfiles)
|
||||
if self.optional:
|
||||
msg = f'the dependent variable was not found "{self.optional}" for variable "{self.path}"'
|
||||
raise VariableCalculationDependencyError(msg, 90, self.xmlfiles)
|
||||
else:
|
||||
msg = f'Variable not found "{self.variable}" for attribute "{self.attribute_name}" for variable "{self.path}"'
|
||||
raise DictConsistencyError(msg, 88, self.xmlfiles)
|
||||
if not isinstance(variable, objectspace.variable):
|
||||
# FIXME remove the pfff
|
||||
raise Exception("pfff it's a family")
|
||||
|
|
|
@ -33,7 +33,7 @@ from json import dumps
|
|||
from os.path import isfile, basename
|
||||
|
||||
from .i18n import _
|
||||
from .error import DictConsistencyError
|
||||
from .error import DictConsistencyError, VariableCalculationDependencyError
|
||||
from .utils import normalize_family
|
||||
from .object_model import Calculation, CONVERT_OPTION
|
||||
|
||||
|
@ -448,7 +448,11 @@ class Variable(Common):
|
|||
if not hasattr(self.elt, "default"):
|
||||
print('FIXME CA EXISTE!!!')
|
||||
if hasattr(self.elt, "default") and self.elt.default is not None:
|
||||
keys["default"] = self.populate_calculation(self.elt.default)
|
||||
try:
|
||||
keys["default"] = self.populate_calculation(self.elt.default)
|
||||
except VariableCalculationDependencyError:
|
||||
pass
|
||||
# mettre dans tous les populate_calculation()
|
||||
if self.elt.path in self.objectspace.default_multi:
|
||||
keys["default_multi"] = self.populate_calculation(self.objectspace.default_multi[self.elt.path])
|
||||
if self.elt.validators:
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
version: 1.1
|
||||
#my_variable:
|
||||
# multi: true
|
||||
# default:
|
||||
# - val1
|
||||
# - val2
|
||||
my_calculated_variable:
|
||||
multi: true
|
||||
default:
|
||||
type: variable
|
||||
variable: rougail.my_variable
|
||||
optional: true
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
---
|
||||
version: 1.1
|
||||
var1:
|
||||
default:
|
||||
type: jinja
|
||||
jinja: |
|
||||
val
|
||||
params:
|
||||
var1:
|
||||
type: variable
|
||||
variable: _.var2
|
||||
optional: true
|
||||
|
||||
|
||||
---
|
||||
version: 1.1
|
||||
var1:
|
||||
default:
|
||||
type: variable
|
||||
variable: _.var2
|
||||
optional: true
|
||||
|
||||
---
|
||||
<gnunux_recto> le 1er dico fonctionne
|
||||
<gnunux_recto> si on fait une variable dans un parametre on peut la mettre optionnelle (si la variable est déclaré ca passe la variable en parametre, si la variable n'existe pas ca ne passe pas le parametre)
|
||||
<gnunux_recto> dans notre cas la variable n'existe pas donc ne passe pas le parametre
|
||||
<gnunux_recto> dans le 2eme ca on ne fait pas un calcul via jinja mais récupère directement la valeur de la variable
|
||||
<gnunux_recto> sauf que le optional n'existe pas pour un calcul (juste pour un parametre)
|
||||
<gnunux_recto> faudrait :
|
||||
<gnunux_recto> 1/ ajouter cette possibilité
|
||||
<gnunux_recto> voir s'il n'y a pas d'autres manque
|
||||
<gnunux_recto> (c'étaot ele 2)
|
|
@ -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_2 = StrOption(name="my_calculated_variable", doc="my_calculated_variable", multi=True, properties=frozenset({"mandatory", "notempty", "standard"}))
|
||||
optiondescription_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2], properties=frozenset({"standard"}))
|
||||
option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[optiondescription_1])
|
|
@ -0,0 +1,14 @@
|
|||
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 = StrOption(name="my_calculated_variable", doc="my_calculated_variable", multi=True, properties=frozenset({"mandatory", "notempty", "standard"}))
|
||||
optiondescription_2 = OptionDescription(name="rougail", doc="rougail", children=[option_3], properties=frozenset({"standard"}))
|
||||
optiondescription_1 = OptionDescription(name="1", doc="1", children=[optiondescription_2], properties=frozenset({"standard"}))
|
||||
option_6 = StrOption(name="my_calculated_variable", doc="my_calculated_variable", multi=True, properties=frozenset({"mandatory", "notempty", "standard"}))
|
||||
optiondescription_5 = OptionDescription(name="rougail", doc="rougail", children=[option_6], properties=frozenset({"standard"}))
|
||||
optiondescription_4 = OptionDescription(name="2", doc="2", children=[optiondescription_5], properties=frozenset({"standard"}))
|
||||
option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[optiondescription_1, optiondescription_4])
|
|
@ -0,0 +1,13 @@
|
|||
version: 1.1
|
||||
my_variable:
|
||||
multi: true
|
||||
default:
|
||||
- val1
|
||||
- val2
|
||||
my_calculated_variable:
|
||||
multi: true
|
||||
default:
|
||||
type: variable
|
||||
variable: rougail.my_variable
|
||||
optional: true
|
||||
|
|
@ -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 = StrOption(name="my_variable", doc="my_variable", multi=True, default=["val1", "val2"], default_multi="val1", properties=frozenset({"mandatory", "notempty", "standard"}))
|
||||
option_3 = StrOption(name="my_calculated_variable", doc="my_calculated_variable", multi=True, default=Calculation(func['calc_value'], Params((ParamOption(option_2)))), properties=frozenset({"mandatory", "notempty", "standard"}))
|
||||
optiondescription_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2, option_3], properties=frozenset({"standard"}))
|
||||
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 = StrOption(name="my_variable", doc="my_variable", multi=True, default=["val1", "val2"], default_multi="val1", properties=frozenset({"mandatory", "notempty", "standard"}))
|
||||
option_4 = StrOption(name="my_calculated_variable", doc="my_calculated_variable", multi=True, default=Calculation(func['calc_value'], Params((ParamOption(option_3)))), properties=frozenset({"mandatory", "notempty", "standard"}))
|
||||
optiondescription_2 = OptionDescription(name="rougail", doc="rougail", children=[option_3, option_4], properties=frozenset({"standard"}))
|
||||
optiondescription_1 = OptionDescription(name="1", doc="1", children=[optiondescription_2], properties=frozenset({"standard"}))
|
||||
option_7 = StrOption(name="my_variable", doc="my_variable", multi=True, default=["val1", "val2"], default_multi="val1", properties=frozenset({"mandatory", "notempty", "standard"}))
|
||||
option_8 = StrOption(name="my_calculated_variable", doc="my_calculated_variable", multi=True, default=Calculation(func['calc_value'], Params((ParamOption(option_7)))), properties=frozenset({"mandatory", "notempty", "standard"}))
|
||||
optiondescription_6 = OptionDescription(name="rougail", doc="rougail", children=[option_7, option_8], properties=frozenset({"standard"}))
|
||||
optiondescription_5 = OptionDescription(name="2", doc="2", children=[optiondescription_6], properties=frozenset({"standard"}))
|
||||
option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[optiondescription_1, optiondescription_5])
|
Loading…
Reference in a new issue