Coverage for opt/mealie/lib/python3.12/site-packages/mealie/schema/household/household.py: 93%
63 statements
« prev ^ index » next coverage.py v7.10.6, created at 2025-11-25 15:32 +0000
« prev ^ index » next coverage.py v7.10.6, created at 2025-11-25 15:32 +0000
1from datetime import datetime 1a
2from typing import Annotated 1a
4from pydantic import UUID4, ConfigDict, StringConstraints, field_validator 1a
5from sqlalchemy.orm import joinedload, selectinload 1a
6from sqlalchemy.orm.interfaces import LoaderOption 1a
8from mealie.db.models.household import Household, HouseholdToRecipe 1a
9from mealie.db.models.users.users import User 1a
10from mealie.schema._mealie.mealie_model import MealieModel 1a
11from mealie.schema.household.webhook import ReadWebhook 1a
12from mealie.schema.response.pagination import PaginationBase 1a
14from .household_preferences import ReadHouseholdPreferences, UpdateHouseholdPreferences 1a
17class HouseholdRecipeBase(MealieModel): 1a
18 last_made: datetime | None = None 1a
21class HouseholdRecipeSummary(HouseholdRecipeBase): 1a
22 recipe_id: UUID4 1a
23 model_config = ConfigDict(from_attributes=True) 1a
26class HouseholdRecipeCreate(HouseholdRecipeBase): 1a
27 household_id: UUID4 1a
28 recipe_id: UUID4 1a
31class HouseholdRecipeUpdate(HouseholdRecipeBase): ... 1a
34class HouseholdRecipeOut(HouseholdRecipeCreate): 1a
35 id: UUID4 1a
36 model_config = ConfigDict(from_attributes=True) 1a
38 @classmethod 1a
39 def loader_options(cls) -> list[LoaderOption]: 1a
40 return [
41 joinedload(HouseholdToRecipe.household),
42 ]
45class HouseholdCreate(MealieModel): 1a
46 group_id: UUID4 | None = None 1a
47 name: Annotated[str, StringConstraints(strip_whitespace=True, min_length=1)] 1a
48 model_config = ConfigDict(from_attributes=True) 1a
51class HouseholdSave(HouseholdCreate): 1a
52 group_id: UUID4 1a
55class UpdateHousehold(HouseholdSave): 1a
56 id: UUID4 1a
57 slug: str 1a
60class UpdateHouseholdAdmin(HouseholdSave): 1a
61 id: UUID4 1a
62 preferences: UpdateHouseholdPreferences | None = None 1a
65class HouseholdSummary(UpdateHousehold): 1a
66 preferences: ReadHouseholdPreferences | None = None 1a
67 model_config = ConfigDict(from_attributes=True) 1a
70class HouseholdUserSummary(MealieModel): 1a
71 id: UUID4 1a
72 full_name: str 1a
73 model_config = ConfigDict(from_attributes=True) 1a
76class HouseholdInDB(HouseholdSummary): 1a
77 group: str 1a
78 users: list[HouseholdUserSummary] | None = None 1a
79 webhooks: list[ReadWebhook] = [] 1a
80 model_config = ConfigDict(from_attributes=True) 1a
82 @classmethod 1a
83 def loader_options(cls) -> list[LoaderOption]: 1a
84 return [ 1bcdefghijkl
85 joinedload(Household.group),
86 joinedload(Household.webhooks),
87 joinedload(Household.preferences),
88 selectinload(Household.users).joinedload(User.group),
89 selectinload(Household.users).joinedload(User.tokens),
90 ]
92 @field_validator("group", mode="before") 1a
93 def convert_group_to_name(cls, v): 1a
94 if not v or isinstance(v, str): 94 ↛ 95line 94 didn't jump to line 95 because the condition on line 94 was never true1ambcdefghijkl
95 return v
97 try: 1ambcdefghijkl
98 return v.name 1ambcdefghijkl
99 except AttributeError:
100 return v
103class HouseholdPagination(PaginationBase): 1a
104 items: list[HouseholdInDB] 1a