mirror of
https://github.com/mealie-recipes/mealie.git
synced 2026-02-16 04:43:13 -05:00
feat: ✨ (WIP) base-shoppinglist infra (#911)
* feat: ✨ base-shoppinglist infra (WIP) * add type checker * implement controllers * apply router fixes * add checked section hide/animation * add label support * formatting * fix overflow images * add experimental banner * fix #912 word break issue * remove any type errors * bump dependencies * remove templates * fix build errors * bump node version * fix template literal
This commit is contained in:
29
mealie/repos/seed/_abstract_seeder.py
Normal file
29
mealie/repos/seed/_abstract_seeder.py
Normal file
@@ -0,0 +1,29 @@
|
||||
from abc import ABC, abstractmethod
|
||||
from logging import Logger
|
||||
from pathlib import Path
|
||||
|
||||
from pydantic import UUID4
|
||||
|
||||
from mealie.core.root_logger import get_logger
|
||||
from mealie.repos.repository_factory import AllRepositories
|
||||
|
||||
|
||||
class AbstractSeeder(ABC):
|
||||
"""
|
||||
Abstract class for seeding data.
|
||||
"""
|
||||
|
||||
def __init__(self, db: AllRepositories, logger: Logger = None, group_id: UUID4 = None):
|
||||
"""
|
||||
Initialize the abstract seeder.
|
||||
:param db_conn: Database connection.
|
||||
:param logger: Logger.
|
||||
"""
|
||||
self.repos = db
|
||||
self.group_id = group_id
|
||||
self.logger = logger or get_logger("Data Seeder")
|
||||
self.resources = Path(__file__).parent / "resources"
|
||||
|
||||
@abstractmethod
|
||||
def seed(self):
|
||||
...
|
||||
@@ -1,40 +0,0 @@
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
from mealie.core.root_logger import get_logger
|
||||
from mealie.repos.repository_factory import AllRepositories
|
||||
from mealie.schema.recipe import CreateIngredientFood, CreateIngredientUnit
|
||||
|
||||
CWD = Path(__file__).parent
|
||||
logger = get_logger(__name__)
|
||||
|
||||
|
||||
def get_default_foods():
|
||||
with open(CWD.joinpath("resources", "foods", "en-us.json"), "r") as f:
|
||||
foods = json.loads(f.read())
|
||||
return foods
|
||||
|
||||
|
||||
def get_default_units() -> dict[str, str]:
|
||||
with open(CWD.joinpath("resources", "units", "en-us.json"), "r") as f:
|
||||
units = json.loads(f.read())
|
||||
return units
|
||||
|
||||
|
||||
def default_recipe_unit_init(db: AllRepositories) -> None:
|
||||
for unit in get_default_units().values():
|
||||
try:
|
||||
db.ingredient_units.create(
|
||||
CreateIngredientUnit(
|
||||
name=unit["name"], description=unit["description"], abbreviation=unit["abbreviation"]
|
||||
)
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
|
||||
for food in get_default_foods():
|
||||
try:
|
||||
|
||||
db.ingredient_foods.create(CreateIngredientFood(name=food, description=""))
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
65
mealie/repos/seed/resources/labels/en-us.json
Normal file
65
mealie/repos/seed/resources/labels/en-us.json
Normal file
@@ -0,0 +1,65 @@
|
||||
[
|
||||
{
|
||||
"name": "Produce"
|
||||
},
|
||||
{
|
||||
"name": "Grains"
|
||||
},
|
||||
{
|
||||
"name": "Fruits"
|
||||
},
|
||||
{
|
||||
"name": "Vegetables"
|
||||
},
|
||||
{
|
||||
"name": "Meat"
|
||||
},
|
||||
{
|
||||
"name": "Seafood"
|
||||
},
|
||||
{
|
||||
"name": "Beverages"
|
||||
},
|
||||
{
|
||||
"name": "Baked Goods"
|
||||
},
|
||||
{
|
||||
"name": "Canned Goods"
|
||||
},
|
||||
{
|
||||
"name": "Condiments"
|
||||
},
|
||||
{
|
||||
"name": "Confectionary"
|
||||
},
|
||||
{
|
||||
"name": "Dairy Products"
|
||||
},
|
||||
{
|
||||
"name": "Frozen Foods"
|
||||
},
|
||||
{
|
||||
"name": "Health Foods"
|
||||
},
|
||||
{
|
||||
"name": "Household"
|
||||
},
|
||||
{
|
||||
"name": "Meat Products"
|
||||
},
|
||||
{
|
||||
"name": "Snacks"
|
||||
},
|
||||
{
|
||||
"name": "Spices"
|
||||
},
|
||||
{
|
||||
"name": "Sweets"
|
||||
},
|
||||
{
|
||||
"name": "Alcohol"
|
||||
},
|
||||
{
|
||||
"name": "Other"
|
||||
}
|
||||
]
|
||||
61
mealie/repos/seed/seeders.py
Normal file
61
mealie/repos/seed/seeders.py
Normal file
@@ -0,0 +1,61 @@
|
||||
from typing import Generator
|
||||
|
||||
from black import json
|
||||
|
||||
from mealie.schema.labels import MultiPurposeLabelSave
|
||||
from mealie.schema.recipe.recipe_ingredient import CreateIngredientFood, CreateIngredientUnit
|
||||
|
||||
from ._abstract_seeder import AbstractSeeder
|
||||
|
||||
|
||||
class MultiPurposeLabelSeeder(AbstractSeeder):
|
||||
def load_data(self) -> Generator[MultiPurposeLabelSave, None, None]:
|
||||
file = self.resources / "labels" / "en-us.json"
|
||||
|
||||
for label in json.loads(file.read_text()):
|
||||
yield MultiPurposeLabelSave(
|
||||
name=label["name"],
|
||||
group_id=self.group_id,
|
||||
)
|
||||
|
||||
def seed(self) -> None:
|
||||
self.logger.info("Seeding MultiPurposeLabel")
|
||||
for label in self.load_data():
|
||||
try:
|
||||
self.repos.group_multi_purpose_labels.create(label)
|
||||
except Exception as e:
|
||||
self.logger.error(e)
|
||||
|
||||
|
||||
class IngredientUnitsSeeder(AbstractSeeder):
|
||||
def load_data(self) -> Generator[CreateIngredientUnit, None, None]:
|
||||
file = self.resources / "units" / "en-us.json"
|
||||
for unit in json.loads(file.read_text()).values():
|
||||
yield CreateIngredientUnit(
|
||||
name=unit["name"],
|
||||
description=unit["description"],
|
||||
abbreviation=unit["abbreviation"],
|
||||
)
|
||||
|
||||
def seed(self) -> None:
|
||||
self.logger.info("Seeding Ingredient Units")
|
||||
for unit in self.load_data():
|
||||
try:
|
||||
self.repos.ingredient_units.create(unit)
|
||||
except Exception as e:
|
||||
self.logger.error(e)
|
||||
|
||||
|
||||
class IngredientFoodsSeeder(AbstractSeeder):
|
||||
def load_data(self) -> Generator[CreateIngredientFood, None, None]:
|
||||
file = self.resources / "foods" / "en-us.json"
|
||||
for food in json.loads(file.read_text()):
|
||||
yield CreateIngredientFood(name=food, description="")
|
||||
|
||||
def seed(self) -> None:
|
||||
self.logger.info("Seeding Ingredient Foods")
|
||||
for food in self.load_data():
|
||||
try:
|
||||
self.repos.ingredient_foods.create(food)
|
||||
except Exception as e:
|
||||
self.logger.error(e)
|
||||
Reference in New Issue
Block a user