Coverage for opt/mealie/lib/python3.12/site-packages/mealie/db/models/recipe/recipe_timeline.py: 90%

29 statements  

« prev     ^ index     » next       coverage.py v7.10.6, created at 2025-11-25 17:29 +0000

1from datetime import UTC, datetime 1a

2from typing import TYPE_CHECKING 1a

3 

4from sqlalchemy import ForeignKey, String 1a

5from sqlalchemy.ext.associationproxy import AssociationProxy, association_proxy 1a

6from sqlalchemy.orm import Mapped, mapped_column, relationship 1a

7 

8from mealie.db.models._model_utils.datetime import NaiveDateTime 1a

9 

10from .._model_base import BaseMixins, SqlAlchemyBase 1a

11from .._model_utils.auto_init import auto_init 1a

12from .._model_utils.guid import GUID 1a

13 

14if TYPE_CHECKING: 14 ↛ 15line 14 didn't jump to line 15 because the condition on line 14 was never true1a

15 from ..users import User 

16 from . import RecipeModel 

17 

18 

19class RecipeTimelineEvent(SqlAlchemyBase, BaseMixins): 1a

20 __tablename__ = "recipe_timeline_events" 1a

21 id: Mapped[GUID] = mapped_column(GUID, primary_key=True, default=GUID.generate) 1a

22 

23 # Parent Recipe 

24 recipe_id: Mapped[GUID] = mapped_column(GUID, ForeignKey("recipes.id"), nullable=False, index=True) 1a

25 recipe: Mapped["RecipeModel"] = relationship("RecipeModel", back_populates="timeline_events") 1a

26 

27 group_id: AssociationProxy[GUID] = association_proxy("recipe", "group_id") 1a

28 household_id: AssociationProxy[GUID] = association_proxy("recipe", "household_id") 1a

29 

30 # Related User (Actor) 

31 user_id: Mapped[GUID] = mapped_column(GUID, ForeignKey("users.id"), nullable=False, index=True) 1a

32 user: Mapped["User"] = relationship( 1a

33 "User", back_populates="recipe_timeline_events", single_parent=True, foreign_keys=[user_id] 

34 ) 

35 

36 # General Properties 

37 subject: Mapped[str] = mapped_column(String, nullable=False) 1a

38 message: Mapped[str | None] = mapped_column(String) 1a

39 event_type: Mapped[str | None] = mapped_column(String) 1a

40 image: Mapped[str | None] = mapped_column(String) 1a

41 

42 # Timestamps 

43 timestamp: Mapped[datetime | None] = mapped_column(NaiveDateTime, index=True) 1a

44 

45 @auto_init() 1a

46 def __init__( 1a

47 self, 

48 timestamp=None, 

49 **_, 

50 ) -> None: 

51 self.timestamp = timestamp or datetime.now(UTC) 1bc