"""Deal with YAML input."""from__future__importannotationsfromtypingimportAnyfrom.objectsimportInput
[docs]classUndefinedSubstitution(Exception):"""Error raised when we find a substitution that is not defined."""def__init__(self,input_name:str)->None:"""Initialize the undefined substitution exception."""super().__init__(f"No substitution found for input {input_name}")self.input=input
[docs]defextract_inputs(obj:Any)->set[str]:"""Extract input from a structure."""found:set[str]=set()_extract_inputs(obj,found)returnfound
def_extract_inputs(obj:Any,found:set[str])->None:"""Extract input from a structure."""ifisinstance(obj,Input):found.add(obj.name)returnifisinstance(obj,list):forvalinobj:_extract_inputs(val,found)returnifisinstance(obj,dict):forvalinobj.values():_extract_inputs(val,found)return