Coverage for opt/mealie/lib/python3.12/site-packages/mealie/db/models/recipe/nutrition.py: 100%
31 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
1import sqlalchemy as sa
2from sqlalchemy.orm import Mapped, mapped_column
4from mealie.db.models._model_base import SqlAlchemyBase
5from mealie.db.models._model_utils.guid import GUID
8class Nutrition(SqlAlchemyBase):
9 __tablename__ = "recipe_nutrition"
10 id: Mapped[int] = mapped_column(sa.Integer, primary_key=True)
11 recipe_id: Mapped[GUID | None] = mapped_column(GUID, sa.ForeignKey("recipes.id"), index=True)
13 calories: Mapped[str | None] = mapped_column(sa.String)
14 carbohydrate_content: Mapped[str | None] = mapped_column(sa.String)
15 cholesterol_content: Mapped[str | None] = mapped_column(sa.String)
16 fat_content: Mapped[str | None] = mapped_column(sa.String)
17 fiber_content: Mapped[str | None] = mapped_column(sa.String)
18 protein_content: Mapped[str | None] = mapped_column(sa.String)
19 saturated_fat_content: Mapped[str | None] = mapped_column(sa.String)
21 # `serving_size` is not a scaling factor, but a per-serving volume or mass
22 # according to schema.org. E.g., "2 L", "500 g", "5 cups", etc.
23 #
24 # Ignoring for now because it's too difficult to work around variable units
25 # in translation for the frontend. Also, it causes cognitive dissonance wrt
26 # "servings" (i.e., "serves 2" etc.), which is an unrelated concept that
27 # might cause confusion.
28 #
29 # serving_size: Mapped[str | None] = mapped_column(sa.String)
31 sodium_content: Mapped[str | None] = mapped_column(sa.String)
32 sugar_content: Mapped[str | None] = mapped_column(sa.String)
33 trans_fat_content: Mapped[str | None] = mapped_column(sa.String)
34 unsaturated_fat_content: Mapped[str | None] = mapped_column(sa.String)
36 def __init__(
37 self,
38 calories=None,
39 carbohydrate_content=None,
40 cholesterol_content=None,
41 fat_content=None,
42 fiber_content=None,
43 protein_content=None,
44 saturated_fat_content=None,
45 sodium_content=None,
46 sugar_content=None,
47 trans_fat_content=None,
48 unsaturated_fat_content=None,
49 ) -> None:
50 self.calories = calories
51 self.carbohydrate_content = carbohydrate_content
52 self.cholesterol_content = cholesterol_content
53 self.fat_content = fat_content
54 self.fiber_content = fiber_content
55 self.protein_content = protein_content
56 self.saturated_fat_content = saturated_fat_content
57 self.sodium_content = sodium_content
58 self.sugar_content = sugar_content
59 self.trans_fat_content = trans_fat_content
60 self.unsaturated_fat_content = unsaturated_fat_content