"""Object Generators (AKA Oracles)""" import yaml from .oracle.base import Oracle from .oracle.object_generator import ObjectGeneratorOracle from .oracle.random_choice import RandomChoiceOracle TYPE_CLASSES = { "object-generator": ObjectGeneratorOracle, "random-choice": RandomChoiceOracle, } def read_datafile(filename: str) -> Oracle: """Read a datafile in YAML format""" with open(filename, "r", encoding="utf-8") as fhand: data = yaml.safe_load(fhand) if not isinstance(data, dict): raise TypeError("Generator data must be an YAML object") if (generator_type := data.get("type")) not in TYPE_CLASSES: raise ValueError(f"No information on how to handle {generator_type} data") handler_class = TYPE_CLASSES[generator_type] return handler_class(data)