import json import re import os from config import * def clean_recipe(recipe): # remove useless ever-changing fields for keyword in recipe["keywords"]: keyword.pop("updated_at", None) # remove buggy food properties recipe.pop("food_properties", None) for step in recipe["steps"]: for ingredient in step["ingredients"]: ingredient["food"].pop("properties", None) # sort conversions recipe.pop("food_properties", None) for step in recipe["steps"]: for ingredient in step["ingredients"]: ingredient["conversions"] = sorted(ingredient["conversions"], key=lambda c: c["unit"]) return recipe def check_recipe(recipe) -> list: md = [] if "steps" in recipe: steps = recipe["steps"] else: steps = [] md.append("No steps?") for i, step in enumerate(steps, 1): md += check_ingredients(step) return md def normalize_amount(a): if a == round(a): return round(a) else: return a def check_ingredients(step): md = [] for ingredient in step["ingredients"]: i_amount = ingredient["amount"] i_amount = normalize_amount(i_amount) if not ingredient.get("unit"): i_unit = "" if i_amount: md.append("- Amount but no unit?") else: i_unit = ingredient["unit"]["name"] if i_unit and i_unit not in VALID_UNITS: md.append(f"- Invalid unit {i_unit}") if not ingredient.get("food"): md.append("- No food element in ingredient?") continue return md def make_link(recipe): return f"[{recipe["name"]}]({TANDOOR_URL + "/view/recipe/" + str(recipe["id"])})" def main(): # Clean for json_file in os.listdir(OUTDIR_JSON): with open(os.path.join(OUTDIR_JSON, json_file), "r", encoding="utf-8") as f: recipe = json.load(f) recipe = clean_recipe(recipe) with open(os.path.join(OUTDIR_JSON, json_file), "w", encoding="utf-8") as f: json.dump(recipe, f, sort_keys=True, indent=2) # Read all and check recipes = [] for json_file in os.listdir(OUTDIR_JSON): with open(os.path.join(OUTDIR_JSON, json_file), "r", encoding="utf-8") as f: data = json.load(f) recipes.append(data) for recipe in recipes: md = check_recipe(recipe) if not md: print(f"## 💚 {make_link(recipe)}") else: print(f"## 💔 {make_link(recipe)}") for line in md: print(line) if __name__ == "__main__": main()