Coverage for opt/mealie/lib/python3.12/site-packages/mealie/schema/recipe/recipe_category.py: 100%

38 statements  

« prev     ^ index     » next       coverage.py v7.10.6, created at 2025-11-25 17:29 +0000

1from pydantic import UUID4, ConfigDict 1a

2from sqlalchemy.orm import selectinload 1a

3from sqlalchemy.orm.interfaces import LoaderOption 1a

4 

5from mealie.db.models.recipe import RecipeModel, Tag 1a

6from mealie.schema._mealie import MealieModel 1a

7 

8 

9class CategoryIn(MealieModel): 1a

10 name: str 1a

11 

12 

13class CategorySave(CategoryIn): 1a

14 group_id: UUID4 1a

15 

16 

17class CategoryBase(CategoryIn): 1a

18 id: UUID4 1a

19 group_id: UUID4 | None = None 1a

20 slug: str 1a

21 model_config = ConfigDict(from_attributes=True) 1a

22 

23 

24class CategoryOut(CategoryBase): 1a

25 slug: str 1a

26 group_id: UUID4 1a

27 model_config = ConfigDict(from_attributes=True) 1a

28 

29 

30class RecipeCategoryResponse(CategoryBase): 1a

31 recipes: "list[RecipeSummary]" = [] 1a

32 model_config = ConfigDict(from_attributes=True) 1a

33 

34 

35class TagIn(CategoryIn): 1a

36 pass 1a

37 

38 

39class TagSave(TagIn): 1a

40 group_id: UUID4 1a

41 

42 

43class TagBase(CategoryBase): 1a

44 pass 1a

45 

46 

47class TagOut(TagSave): 1a

48 id: UUID4 1a

49 slug: str 1a

50 model_config = ConfigDict(from_attributes=True) 1a

51 

52 

53class RecipeTagResponse(RecipeCategoryResponse): 1a

54 @classmethod 1a

55 def loader_options(cls) -> list[LoaderOption]: 1a

56 return [ 1bc

57 selectinload(Tag.recipes).joinedload(RecipeModel.recipe_category), 

58 selectinload(Tag.recipes).joinedload(RecipeModel.tags), 

59 selectinload(Tag.recipes).joinedload(RecipeModel.tools), 

60 ] 

61 

62 

63from mealie.schema.recipe.recipe import RecipeSummary # noqa: E402 1a

64 

65RecipeCategoryResponse.model_rebuild() 1a

66RecipeTagResponse.model_rebuild() 1a