in 3_optimization-design-ptn/03_prompt-optimization/promptwizard/glue/common/utils/file.py [0:0]
def yaml_to_class(yaml_file_path: str, cls: type, default_yaml_file_path: str = None):
"""
Read yaml file present at path `yaml_file_path`, convert it to dictionary using pyyaml's standard methods.
Then convert this dictionary to class object of class given as `cls`. Further check if user has provided all
the required fields in `yaml_file_path`. Fields that are missing in `yaml_file_path`, set them with defaults.
:param yaml_file_path: str
:param cls: type
:param default_yaml_file_path: str
:return:
"""
if not yaml_file_path:
yaml_file_path = default_yaml_file_path
custom_args = yaml_to_dict(yaml_file_path)
if default_yaml_file_path:
# If user has not provided all the required arguments, fill them with defaults
default_args = yaml_to_dict(default_yaml_file_path)
missing_args = set(default_args) - set(custom_args)
for key in list(missing_args):
custom_args[key] = default_args[key]
try:
yaml_as_class = cls(**custom_args)
except TypeError as e:
raise GlueValidaionException(
f"Exception while converting yaml file at {yaml_file_path} "
f"to class {cls.__name__}: ",
e,
)
return yaml_as_class