feat: raises a convenient error for a dynamic family
When a dynicamic family references to an unexistent multi variable, an error is raised.
This commit is contained in:
parent
897264b779
commit
d2244c7bc5
3 changed files with 31 additions and 14 deletions
|
@ -73,3 +73,15 @@ class DictConsistencyError(Exception):
|
||||||
|
|
||||||
class UpgradeError(Exception):
|
class UpgradeError(Exception):
|
||||||
"""Error during XML upgrade"""
|
"""Error during XML upgrade"""
|
||||||
|
|
||||||
|
## ---- generic exceptions ----
|
||||||
|
|
||||||
|
class NotFoundError(Exception):
|
||||||
|
"not found error"
|
||||||
|
pass
|
||||||
|
|
||||||
|
class VariableNotFoundError(NotFoundError):
|
||||||
|
"Variable was not found"
|
||||||
|
def __init__(self, errmsg, varname):
|
||||||
|
self.varname = varname
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ from pydantic import (
|
||||||
ConfigDict,
|
ConfigDict,
|
||||||
)
|
)
|
||||||
from .utils import get_jinja_variable_to_param, get_realpath
|
from .utils import get_jinja_variable_to_param, get_realpath
|
||||||
|
from .error import VariableNotFoundError
|
||||||
|
|
||||||
BASETYPE = Union[StrictBool, StrictInt, StrictFloat, StrictStr, None]
|
BASETYPE = Union[StrictBool, StrictInt, StrictFloat, StrictStr, None]
|
||||||
|
|
||||||
|
@ -303,8 +303,9 @@ class VariableCalculation(Calculation):
|
||||||
variable_path = self.get_realpath(self.variable)
|
variable_path = self.get_realpath(self.variable)
|
||||||
variable, suffix, dynamic = objectspace.paths.get_with_dynamic(variable_path)
|
variable, suffix, dynamic = objectspace.paths.get_with_dynamic(variable_path)
|
||||||
if not variable:
|
if not variable:
|
||||||
raise Exception(f"pffff {variable_path}")
|
raise VariableNotFoundError(f"Variable not found {variable_path}", variable_path)
|
||||||
if not isinstance(variable, objectspace.variable):
|
if not isinstance(variable, objectspace.variable):
|
||||||
|
# FIXME remove the pfff
|
||||||
raise Exception("pfff it's a family")
|
raise Exception("pfff it's a family")
|
||||||
param = {
|
param = {
|
||||||
"type": "variable",
|
"type": "variable",
|
||||||
|
|
|
@ -33,7 +33,7 @@ from json import dumps
|
||||||
from os.path import isfile, basename
|
from os.path import isfile, basename
|
||||||
|
|
||||||
from .i18n import _
|
from .i18n import _
|
||||||
from .error import DictConsistencyError
|
from .error import DictConsistencyError, VariableNotFoundError
|
||||||
from .utils import normalize_family
|
from .utils import normalize_family
|
||||||
from .object_model import Calculation, CONVERT_OPTION
|
from .object_model import Calculation, CONVERT_OPTION
|
||||||
|
|
||||||
|
@ -575,6 +575,7 @@ class Family(Common):
|
||||||
children = []
|
children = []
|
||||||
for path in self.objectspace.parents[self.elt.path]:
|
for path in self.objectspace.parents[self.elt.path]:
|
||||||
children.append(self.objectspace.paths[path])
|
children.append(self.objectspace.paths[path])
|
||||||
|
try:
|
||||||
keys["children"] = (
|
keys["children"] = (
|
||||||
"["
|
"["
|
||||||
+ ", ".join(
|
+ ", ".join(
|
||||||
|
@ -587,3 +588,6 @@ class Family(Common):
|
||||||
)
|
)
|
||||||
+ "]"
|
+ "]"
|
||||||
)
|
)
|
||||||
|
except VariableNotFoundError as exc:
|
||||||
|
msg = f"The variable '{exc.varname}' is mandatory for the dynamic family"
|
||||||
|
raise DictConsistencyError(msg, 88, self.elt.xmlfiles)
|
||||||
|
|
Loading…
Reference in a new issue