Coverage for opt/mealie/lib/python3.12/site-packages/mealie/repos/repository_foods.py: 85%

20 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-10-07 03:04 +0000

1from pydantic import UUID4 

2from sqlalchemy import select 

3 

4from mealie.db.models.recipe.ingredient import IngredientFoodModel 

5from mealie.schema.recipe.recipe_ingredient import IngredientFood 

6 

7from .repository_generic import GroupRepositoryGeneric 

8 

9 

10class RepositoryFood(GroupRepositoryGeneric[IngredientFood, IngredientFoodModel]): 

11 def _get_food(self, id: UUID4) -> IngredientFoodModel: 

12 stmt = select(self.model).filter_by(**self._filter_builder(**{"id": id})) 

13 return self.session.execute(stmt).scalars().one() 

14 

15 def merge(self, from_food: UUID4, to_food: UUID4) -> IngredientFood | None: 

16 from_model = self._get_food(from_food) 

17 to_model = self._get_food(to_food) 

18 

19 to_model.ingredients += from_model.ingredients 

20 

21 try: 

22 self.session.delete(from_model) 

23 self.session.commit() 

24 except Exception as e: 

25 self.session.rollback() 

26 raise e 

27 

28 return self.get_one(to_food)