mirror of
https://github.com/mealie-recipes/mealie.git
synced 2025-12-30 22:00:38 -05:00
feat: Migrate from CRF++ to Ingredient Parser (a Python package) (#5061)
This commit is contained in:
@@ -250,7 +250,7 @@ class RepositoryGeneric(Generic[Schema, Model]):
|
||||
match_key = match_key or self.primary_key
|
||||
|
||||
result = self._query_one(value, match_key)
|
||||
results_as_model = self.schema.model_validate(result)
|
||||
result_as_model = self.schema.model_validate(result)
|
||||
|
||||
try:
|
||||
self.session.delete(result)
|
||||
@@ -259,10 +259,10 @@ class RepositoryGeneric(Generic[Schema, Model]):
|
||||
self.session.rollback()
|
||||
raise e
|
||||
|
||||
return results_as_model
|
||||
return result_as_model
|
||||
|
||||
def delete_many(self, values: Iterable) -> Schema:
|
||||
query = self._query().filter(self.model.id.in_(values)) # type: ignore
|
||||
def delete_many(self, values: Iterable) -> list[Schema]:
|
||||
query = self._query().filter(self.model.id.in_(values))
|
||||
results = self.session.execute(query).unique().scalars().all()
|
||||
results_as_model = [self.schema.model_validate(result) for result in results]
|
||||
|
||||
@@ -277,7 +277,7 @@ class RepositoryGeneric(Generic[Schema, Model]):
|
||||
self.session.rollback()
|
||||
raise e
|
||||
|
||||
return results_as_model # type: ignore
|
||||
return results_as_model
|
||||
|
||||
def delete_all(self) -> None:
|
||||
delete(self.model)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import re as re
|
||||
from collections.abc import Sequence
|
||||
from collections.abc import Iterable, Sequence
|
||||
from random import randint
|
||||
from typing import Self, cast
|
||||
from uuid import UUID
|
||||
@@ -103,6 +103,51 @@ class RepositoryRecipes(HouseholdRepositoryGeneric[Recipe, RecipeModel]):
|
||||
if i >= max_retries:
|
||||
raise
|
||||
|
||||
def _delete_recipe(self, recipe: RecipeModel) -> Recipe:
|
||||
recipe_as_model = self.schema.model_validate(recipe)
|
||||
|
||||
# first remove UserToRecipe entries so we don't run into stale data errors
|
||||
try:
|
||||
user_to_recipe_delete_query = sa.delete(UserToRecipe).where(UserToRecipe.recipe_id == recipe.id)
|
||||
self.session.execute(user_to_recipe_delete_query)
|
||||
self.session.commit()
|
||||
except Exception:
|
||||
self.session.rollback()
|
||||
raise
|
||||
|
||||
# remove the recipe
|
||||
try:
|
||||
self.session.delete(recipe)
|
||||
self.session.commit()
|
||||
except Exception:
|
||||
self.session.rollback()
|
||||
raise
|
||||
|
||||
return recipe_as_model
|
||||
|
||||
def delete(self, value, match_key: str | None = None) -> Recipe:
|
||||
match_key = match_key or self.primary_key
|
||||
recipe_in_db = self._query_one(value, match_key)
|
||||
return self._delete_recipe(recipe_in_db)
|
||||
|
||||
def delete_many(self, values: Iterable) -> list[Recipe]:
|
||||
query = self._query().filter(self.model.id.in_(values))
|
||||
recipes_in_db = self.session.execute(query).unique().scalars().all()
|
||||
results: list[Recipe] = []
|
||||
|
||||
# we create a delete statement for each row
|
||||
# we don't delete the whole query in one statement because postgres doesn't cascade correctly
|
||||
for recipe_in_db in recipes_in_db:
|
||||
results.append(self._delete_recipe(recipe_in_db))
|
||||
|
||||
try:
|
||||
self.session.commit()
|
||||
except Exception as e:
|
||||
self.session.rollback()
|
||||
raise e
|
||||
|
||||
return results
|
||||
|
||||
def update_image(self, slug: str, _: str | None = None) -> int:
|
||||
entry: RecipeModel = self._query_one(match_value=slug)
|
||||
entry.image = randint(0, 255)
|
||||
|
||||
Reference in New Issue
Block a user