Coverage for opt/mealie/lib/python3.12/site-packages/mealie/db/models/household/cookbook.py: 92%

37 statements  

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

1from typing import TYPE_CHECKING, Optional 1a

2 

3from sqlalchemy import Boolean, ForeignKey, Integer, String, UniqueConstraint, orm 1a

4from sqlalchemy.orm import Mapped, mapped_column 1a

5 

6from .._model_base import BaseMixins, SqlAlchemyBase 1a

7from .._model_utils import guid 1a

8from .._model_utils.auto_init import auto_init 1a

9from ..recipe.category import Category, cookbooks_to_categories 1a

10from ..recipe.tag import Tag, cookbooks_to_tags 1a

11from ..recipe.tool import Tool, cookbooks_to_tools 1a

12 

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

14 from ..group import Group 

15 from .household import Household 

16 

17 

18class CookBook(SqlAlchemyBase, BaseMixins): 1a

19 __tablename__ = "cookbooks" 1a

20 __table_args__: tuple[UniqueConstraint, ...] = ( 1a

21 UniqueConstraint("slug", "group_id", name="cookbook_slug_group_id_key"), 

22 ) 

23 

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

25 position: Mapped[int] = mapped_column(Integer, nullable=False, default=1) 1a

26 

27 group_id: Mapped[guid.GUID | None] = mapped_column(guid.GUID, ForeignKey("groups.id"), index=True) 1a

28 group: Mapped[Optional["Group"]] = orm.relationship("Group", back_populates="cookbooks") 1a

29 household_id: Mapped[guid.GUID | None] = mapped_column(guid.GUID, ForeignKey("households.id"), index=True) 1a

30 household: Mapped[Optional["Household"]] = orm.relationship("Household", back_populates="cookbooks") 1a

31 

32 name: Mapped[str] = mapped_column(String, nullable=False) 1a

33 slug: Mapped[str] = mapped_column(String, nullable=False, index=True) 1a

34 description: Mapped[str | None] = mapped_column(String, default="") 1a

35 public: Mapped[str | None] = mapped_column(Boolean, default=False) 1a

36 query_filter_string: Mapped[str] = mapped_column(String, nullable=False, default="") 1a

37 

38 # Old filters - deprecated in favor of query filter strings 

39 categories: Mapped[list[Category]] = orm.relationship( 1a

40 Category, secondary=cookbooks_to_categories, single_parent=True 

41 ) 

42 require_all_categories: Mapped[bool | None] = mapped_column(Boolean, default=True) 1a

43 

44 tags: Mapped[list[Tag]] = orm.relationship(Tag, secondary=cookbooks_to_tags, single_parent=True) 1a

45 require_all_tags: Mapped[bool | None] = mapped_column(Boolean, default=True) 1a

46 

47 tools: Mapped[list[Tool]] = orm.relationship(Tool, secondary=cookbooks_to_tools, single_parent=True) 1a

48 require_all_tools: Mapped[bool | None] = mapped_column(Boolean, default=True) 1a

49 

50 @auto_init() 1a

51 def __init__(self, **_) -> None: 1a

52 pass 1cdebfghijk

53 

54 def update(self, *args, **kwarg): 1a

55 self.__init__(*args, **kwarg) 1b