Functionality to read and write JSON files
This commit is contained in:
55
src/FileHandler.py
Normal file
55
src/FileHandler.py
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
import os
|
||||||
|
import json
|
||||||
|
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
|
||||||
|
load_dotenv()
|
||||||
|
|
||||||
|
file_path = os.getenv("file_path")
|
||||||
|
|
||||||
|
def read_json() -> dict:
|
||||||
|
try:
|
||||||
|
with open("./src/json/ingredients.json", "rt") as file:
|
||||||
|
return json.load(file)
|
||||||
|
except:
|
||||||
|
print("Could not find or read file.")
|
||||||
|
|
||||||
|
def get_selected_meals(meals: dict) -> dict:
|
||||||
|
meal_json = read_json()
|
||||||
|
selected_meals = {}
|
||||||
|
for meal in meals:
|
||||||
|
if meal in meal_json:
|
||||||
|
selected_meals[meal] = meal_json[meal]
|
||||||
|
return selected_meals
|
||||||
|
|
||||||
|
def combine_ingredients(meals: dict) -> dict:
|
||||||
|
combined_ingredients = {}
|
||||||
|
|
||||||
|
for meal, ingredients in meals.items():
|
||||||
|
for ingredient, detail in ingredients.items():
|
||||||
|
if ingredient in combined_ingredients:
|
||||||
|
combined_ingredients[ingredient]['quantity'] += detail['quantity']
|
||||||
|
else:
|
||||||
|
combined_ingredients[ingredient] = detail
|
||||||
|
return combined_ingredients
|
||||||
|
|
||||||
|
def write_checklist(data: dict) -> None:
|
||||||
|
if os.path.exists(file_path):
|
||||||
|
os.remove(file_path)
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open(file_path, 'w') as checklist:
|
||||||
|
for ingredient, details in data.items():
|
||||||
|
s = ingredient + " - " + str(details['quantity'])
|
||||||
|
if details['units'] != None:
|
||||||
|
s += " " + details['units']
|
||||||
|
checklist.write(f"- [ ] {s}\n")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Unable to write data to file. {e}")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
meals = read_json()
|
||||||
|
if meals:
|
||||||
|
combined_ingredients = combine_ingredients(meals)
|
||||||
|
write_checklist(combined_ingredients)
|
||||||
Reference in New Issue
Block a user