30 lines
818 B
Python
30 lines
818 B
Python
"""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)
|