1 """Deal with YAML input."""
3 from __future__
import annotations
7 from .objects
import Input
11 """Error raised when we find a substitution that is not defined."""
14 """Initialize the undefined substitution exception."""
15 super().
__init__(f
"No substitution found for input {input_name}")
20 """Extract input from a structure."""
21 found: set[str] = set()
27 """Extract input from a structure."""
28 if isinstance(obj, Input):
32 if isinstance(obj, list):
37 if isinstance(obj, dict):
38 for val
in obj.values():
43 def substitute(obj: Any, substitutions: dict[str, Any]) -> Any:
44 """Substitute values."""
45 if isinstance(obj, Input):
46 if obj.name
not in substitutions:
48 return substitutions[obj.name]
50 if isinstance(obj, list):
51 return [
substitute(val, substitutions)
for val
in obj]
53 if isinstance(obj, dict):
54 return {key:
substitute(val, substitutions)
for key, val
in obj.items()}