Coverage for opt/mealie/lib/python3.12/site-packages/mealie/schema/recipe/recipe_tool.py: 84%
36 statements
« prev ^ index » next coverage.py v7.10.6, created at 2025-11-25 17:29 +0000
« prev ^ index » next coverage.py v7.10.6, created at 2025-11-25 17:29 +0000
1from pydantic import UUID4, ConfigDict, field_validator 1a
2from sqlalchemy.orm import selectinload 1a
3from sqlalchemy.orm.interfaces import LoaderOption 1a
5from mealie.db.models.recipe import RecipeModel, Tool 1a
6from mealie.schema._mealie import MealieModel 1a
9class RecipeToolCreate(MealieModel): 1a
10 name: str 1a
11 households_with_tool: list[str] = [] 1a
14class RecipeToolSave(RecipeToolCreate): 1a
15 group_id: UUID4 1a
18class RecipeToolOut(RecipeToolCreate): 1a
19 id: UUID4 1a
20 group_id: UUID4 1a
21 slug: str 1a
23 model_config = ConfigDict(from_attributes=True) 1a
25 @field_validator("households_with_tool", mode="before") 1a
26 def convert_households_to_slugs(cls, v): 1a
27 if not v: 27 ↛ 30line 27 didn't jump to line 30 because the condition on line 27 was always true1fghicdjklemnopqrsb
28 return [] 1fghicdjklemnopqrsb
30 try:
31 return [household.slug for household in v]
32 except AttributeError:
33 return v
35 def is_on_hand(self, household_slug: str) -> bool: 1a
36 return household_slug in self.households_with_tool
38 @classmethod 1a
39 def loader_options(cls) -> list[LoaderOption]: 1a
40 return [ 1cdeb
41 selectinload(Tool.households_with_tool),
42 ]
45class RecipeToolResponse(RecipeToolOut): 1a
46 recipes: list["RecipeSummary"] = [] 1a
47 model_config = ConfigDict(from_attributes=True) 1a
49 @classmethod 1a
50 def loader_options(cls) -> list[LoaderOption]: 1a
51 return [
52 selectinload(Tool.households_with_tool),
53 selectinload(Tool.recipes).joinedload(RecipeModel.recipe_category),
54 selectinload(Tool.recipes).joinedload(RecipeModel.tags),
55 selectinload(Tool.recipes).joinedload(RecipeModel.tools),
56 ]
59from .recipe import RecipeSummary # noqa: E402 1a
61RecipeToolResponse.model_rebuild() 1a