Made yaml template loader more generic

This commit is contained in:
2025-11-09 02:26:18 +01:00
parent 0f4fb2c5df
commit eb36060ef5

View File

@@ -34,7 +34,7 @@ TEMPLATES = Environment(
)
def node_encoder(node: dict):
def render_templates(node: dict):
class Inner(json.JSONEncoder):
def default(self, o):
if isinstance(o, Template):
@@ -70,20 +70,23 @@ def schematic_constructor(loader: yaml.SafeLoader, node: yaml.nodes.ScalarNode):
raise yaml.MarkedYAMLError("Failed to load schematic", node.start_mark)
def patch_constructor(loader: yaml.SafeLoader, node: yaml.nodes.ScalarNode):
patch_name = loader.construct_scalar(node)
try:
template = PATCHES.get_template(f"{patch_name}.yaml")
return template
except Exception:
raise yaml.MarkedYAMLError("Failed to load patch", node.start_mark)
def template_constructor(environment: Environment):
def inner(loader: yaml.SafeLoader, node: yaml.nodes.ScalarNode):
patch_name = loader.construct_scalar(node)
try:
template = environment.get_template(f"{patch_name}.yaml")
return template
except Exception:
raise yaml.MarkedYAMLError("Failed to load patch", node.start_mark)
return inner
def get_loader():
"""Add special constructors to yaml loader"""
loader = yaml.SafeLoader
loader.add_constructor("!schematic", schematic_constructor)
loader.add_constructor("!patch", patch_constructor)
loader.add_constructor("!patch", template_constructor(PATCHES))
return loader
@@ -126,7 +129,9 @@ def main():
# Quick and dirty way to resolve all the templates using a custom encoder
nodes = list(
map(lambda node: json.loads(json.dumps(node, cls=node_encoder(node))), nodes)
map(
lambda node: json.loads(json.dumps(node, cls=render_templates(node))), nodes
)
)
with open(ROOT.joinpath("config.yaml")) as fyaml: