gm-assistant/gm_assistant/data_reader.py

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)