Coverage for opt/mealie/lib/python3.12/site-packages/mealie/schema/recipe/recipe_category.py: 100%
38 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 03:04 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 03:04 +0000
1from pydantic import UUID4, ConfigDict
2from sqlalchemy.orm import selectinload
3from sqlalchemy.orm.interfaces import LoaderOption
5from mealie.db.models.recipe import RecipeModel, Tag
6from mealie.schema._mealie import MealieModel
9class CategoryIn(MealieModel):
10 name: str
13class CategorySave(CategoryIn):
14 group_id: UUID4
17class CategoryBase(CategoryIn):
18 id: UUID4
19 group_id: UUID4 | None = None
20 slug: str
21 model_config = ConfigDict(from_attributes=True)
24class CategoryOut(CategoryBase):
25 slug: str
26 group_id: UUID4
27 model_config = ConfigDict(from_attributes=True)
30class RecipeCategoryResponse(CategoryBase):
31 recipes: "list[RecipeSummary]" = []
32 model_config = ConfigDict(from_attributes=True)
35class TagIn(CategoryIn):
36 pass
39class TagSave(TagIn):
40 group_id: UUID4
43class TagBase(CategoryBase):
44 pass
47class TagOut(TagSave):
48 id: UUID4
49 slug: str
50 model_config = ConfigDict(from_attributes=True)
53class RecipeTagResponse(RecipeCategoryResponse):
54 @classmethod
55 def loader_options(cls) -> list[LoaderOption]:
56 return [
57 selectinload(Tag.recipes).joinedload(RecipeModel.recipe_category),
58 selectinload(Tag.recipes).joinedload(RecipeModel.tags),
59 selectinload(Tag.recipes).joinedload(RecipeModel.tools),
60 ]
63from mealie.schema.recipe.recipe import RecipeSummary # noqa: E402
65RecipeCategoryResponse.model_rebuild()
66RecipeTagResponse.model_rebuild()