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

1from pydantic import ConfigDict 

2from sqlalchemy import ForeignKey, Integer, String, orm 

3from sqlalchemy.orm import Mapped, mapped_column 

4 

5from .._model_base import BaseMixins, SqlAlchemyBase 

6from .._model_utils.auto_init import auto_init 

7from .._model_utils.guid import GUID 

8 

9 

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) 

14 

15 @auto_init() 

16 def __init__(self, **_) -> None: 

17 pass 

18 

19 

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) 

29 

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 ) 

39 

40 @auto_init() 

41 def __init__(self, ingredient_references, session, **_) -> None: 

42 self.ingredient_references = [RecipeIngredientRefLink(**ref, session=session) for ref in ingredient_references]