Coverage for opt/mealie/lib/python3.12/site-packages/mealie/db/models/recipe/instruction.py: 96%
27 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 ConfigDict
2from sqlalchemy import ForeignKey, Integer, String, orm
3from sqlalchemy.orm import Mapped, mapped_column
5from .._model_base import BaseMixins, SqlAlchemyBase
6from .._model_utils.auto_init import auto_init
7from .._model_utils.guid import GUID
10class RecipeIngredientRefLink(SqlAlchemyBase, BaseMixins):
11 __tablename__ = "recipe_ingredient_ref_link"
12 instruction_id: Mapped[GUID | None] = mapped_column(GUID, ForeignKey("recipe_instructions.id"), index=True)
13 reference_id: Mapped[GUID | None] = mapped_column(GUID, index=True)
15 @auto_init()
16 def __init__(self, **_) -> None:
17 pass
20class RecipeInstruction(SqlAlchemyBase):
21 __tablename__ = "recipe_instructions"
22 id: Mapped[GUID] = mapped_column(GUID, primary_key=True, default=GUID.generate)
23 recipe_id: Mapped[GUID | None] = mapped_column(GUID, ForeignKey("recipes.id"), index=True)
24 position: Mapped[int | None] = mapped_column(Integer, index=True)
25 type: Mapped[str | None] = mapped_column(String, default="")
26 title: Mapped[str | None] = mapped_column(String) # This is the section title
27 text: Mapped[str | None] = mapped_column(String)
28 summary: Mapped[str | None] = mapped_column(String)
30 ingredient_references: Mapped[list[RecipeIngredientRefLink]] = orm.relationship(
31 RecipeIngredientRefLink, cascade="all, delete-orphan"
32 )
33 model_config = ConfigDict(
34 exclude={
35 "id",
36 "ingredient_references",
37 }
38 )
40 @auto_init()
41 def __init__(self, ingredient_references, session, **_) -> None:
42 self.ingredient_references = [RecipeIngredientRefLink(**ref, session=session) for ref in ingredient_references]