From eb36060ef5e2b8c6371a4af287d26261e7dd2470 Mon Sep 17 00:00:00 2001 From: Dreaded_X Date: Sun, 9 Nov 2025 02:26:18 +0100 Subject: [PATCH] Made yaml template loader more generic --- tools/render | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/tools/render b/tools/render index 590a1ce..95ca0d3 100755 --- a/tools/render +++ b/tools/render @@ -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: