From 290eea8ec27f4b88a65a49d3b24582602164497e Mon Sep 17 00:00:00 2001 From: gamerdonkey Date: Wed, 10 Sep 2025 18:17:38 +0000 Subject: [PATCH] Adding support for sub-recipes. --- make_tree.py | 38 +++++++++++++++++++++++------------ output_html.py | 54 ++++++++++++++++++++++++++++++-------------------- 2 files changed, 58 insertions(+), 34 deletions(-) diff --git a/make_tree.py b/make_tree.py index 95335c2..7f3a1c9 100644 --- a/make_tree.py +++ b/make_tree.py @@ -1,17 +1,19 @@ +import json + from anytree import Node, RenderTree -from anytree.exporter import JsonExporter +from anytree.exporter import DictExporter -def print_ingredients(): - for i, node in ingredients.items(): +def print_nodes(): + for i, node in nodes.items(): print(f" {i}.) {node.result}") -ingredients = {} +nodes = {} i = 0 node = "start" while node: - print_ingredients() + print_nodes() node = input("Add node: ") @@ -24,21 +26,31 @@ while node: new_node = Node(node, description=description, result=result) for e in [int(key.strip()) for key in needs.split(",")]: - ingredients.pop(e).parent = new_node + nodes.pop(e).parent = new_node else: new_node = Node(node, description=description, result=node) - ingredients[i] = new_node + nodes[i] = new_node i += 1 -for pre, _, node in RenderTree(new_node): - print(f"{pre}{node.name}") +root_keys = nodes.keys() + +for key in root_keys: + for pre, _, node in RenderTree(nodes[key]): + print(f"{pre}{node.name}") name = input("Recipe name: ") - +description = input("Recipe description: ") if name: - name = name.replace(" ", "_") + sub_recipes = [] + exporter = DictExporter() + for key in root_keys: + sub_recipes.append(exporter.export(nodes[key])) - with open(f"{name}.json", 'w') as f: - JsonExporter(indent=2).write(new_node, f) + recipe = {"name": name, "description": description, "sub_recipes": sub_recipes} + + filename = name.replace(" ", "_").lower() + + with open(f"{filename}.json", 'w') as f: + f.write(json.dumps(recipe)) diff --git a/output_html.py b/output_html.py index 9b07e91..14356aa 100644 --- a/output_html.py +++ b/output_html.py @@ -1,5 +1,7 @@ +import json + from anytree import LevelOrderIter, LevelOrderGroupIter -from anytree.importer import JsonImporter +from anytree.importer import DictImporter from sys import argv @@ -37,38 +39,48 @@ if len(argv) < 2: exit() with open(argv[1], 'r') as f: - root = JsonImporter().read(f) + recipe = json.loads(f.read()) -output_rows = [] +recipe_name = recipe.get("name") +recipe_desc = recipe.get("description") +importer = DictImporter() +sub_recipes = [importer.import_(data) for data in recipe["sub_recipes"]] -for i in range(len(root.leaves)): - output_rows.append([]) - -build_rows_depth_first(root, output_rows) - -print("

Ingredients

") +print(f"

{recipe_name}

") +print(f"

{recipe_desc}

") +print("

Needs

") print("") print("

Steps

") print("
    ") -tasks = [node for node in LevelOrderIter(root) if not node.is_leaf] -for task in reversed(tasks): - print(f"
  1. {task.description}
  2. ") +for sub_recipe in sub_recipes: + tasks = [node for node in LevelOrderIter(sub_recipe) if not node.is_leaf] + for task in reversed(tasks): + print(f"
  3. {task.description if task.description else task.name}
  4. ") print("
") -print("") +for sub_recipe in sub_recipes: + print("
") -for row in output_rows: - print("") - for cell in row: - print(f" {cell}") - print("") + output_rows = [] -print("
") + for i in range(len(sub_recipe.leaves)): + output_rows.append([]) + + build_rows_depth_first(sub_recipe, output_rows) + + for row in output_rows: + print("") + for cell in row: + print(f" {cell}") + print("") + + print("")