1
0
Fork 0
mirror of https://github.com/mealie-recipes/mealie.git synced 2025-07-22 06:39:41 +02:00
mealie/mealie/repos/seed/seeders.py
Michael Genson a6c46a7420
Feature: Shopping List Label Section Improvements (#2090)
* added backend for shopping list label config

* updated codegen

* refactored shopping list ops to service
removed unique contraint
removed label settings from main route/schema
added new route for label settings

* codegen

* made sure label settings output in position order

* implemented submenu for label order drag and drop

* removed redundant label and tweaked formatting

* added view by label to user preferences

* made items draggable within each label section

* moved reorder labels to its own button

* made dialog scrollable

* fixed broken model

* refactored labels to use a service
moved shopping list label logic to service
modified label seeder to use service

* added tests

* fix for first label missing the tag icon

* fixed wrong mapped type

* added statement to create existing relationships

* fix restore test, maybe
2023-02-21 18:58:41 -09:00

91 lines
3.3 KiB
Python

import json
import pathlib
from collections.abc import Generator
from functools import cached_property
from mealie.schema.labels import MultiPurposeLabelSave
from mealie.schema.recipe.recipe_ingredient import (
SaveIngredientFood,
SaveIngredientUnit,
)
from mealie.services.group_services.labels_service import MultiPurposeLabelService
from ._abstract_seeder import AbstractSeeder
from .resources import foods, labels, units
class MultiPurposeLabelSeeder(AbstractSeeder):
@cached_property
def service(self):
return MultiPurposeLabelService(self.repos, self.group_id)
def get_file(self, locale: str | None = None) -> pathlib.Path:
locale_path = self.resources / "labels" / "locales" / f"{locale}.json"
return locale_path if locale_path.exists() else labels.en_US
def load_data(self, locale: str | None = None) -> Generator[MultiPurposeLabelSave, None, None]:
file = self.get_file(locale)
for label in json.loads(file.read_text(encoding="utf-8")):
yield MultiPurposeLabelSave(
name=label["name"],
group_id=self.group_id,
)
def seed(self, locale: str | None = None) -> None:
self.logger.info("Seeding MultiPurposeLabel")
for label in self.load_data(locale):
try:
self.service.create_one(label)
except Exception as e:
self.logger.error(e)
class IngredientUnitsSeeder(AbstractSeeder):
def get_file(self, locale: str | None = None) -> pathlib.Path:
locale_path = self.resources / "units" / "locales" / f"{locale}.json"
return locale_path if locale_path.exists() else units.en_US
def load_data(self, locale: str | None = None) -> Generator[SaveIngredientUnit, None, None]:
file = self.get_file(locale)
for unit in json.loads(file.read_text(encoding="utf-8")).values():
yield SaveIngredientUnit(
group_id=self.group_id,
name=unit["name"],
description=unit["description"],
abbreviation=unit["abbreviation"],
)
def seed(self, locale: str | None = None) -> None:
self.logger.info("Seeding Ingredient Units")
for unit in self.load_data(locale):
try:
self.repos.ingredient_units.create(unit)
except Exception as e:
self.logger.error(e)
class IngredientFoodsSeeder(AbstractSeeder):
def get_file(self, locale: str | None = None) -> pathlib.Path:
locale_path = self.resources / "foods" / "locales" / f"{locale}.json"
return locale_path if locale_path.exists() else foods.en_US
def load_data(self, locale: str | None = None) -> Generator[SaveIngredientFood, None, None]:
file = self.get_file(locale)
seed_foods: dict[str, str] = json.loads(file.read_text(encoding="utf-8"))
for food in seed_foods.values():
yield SaveIngredientFood(
group_id=self.group_id,
name=food,
description="",
)
def seed(self, locale: str | None = None) -> None:
self.logger.info("Seeding Ingredient Foods")
for food in self.load_data(locale):
try:
self.repos.ingredient_foods.create(food)
except Exception as e:
self.logger.error(e)