Coverage for opt/mealie/lib/python3.12/site-packages/mealie/db/models/household/cookbook.py: 92%
37 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 typing import TYPE_CHECKING, Optional
3from sqlalchemy import Boolean, ForeignKey, Integer, String, UniqueConstraint, orm
4from sqlalchemy.orm import Mapped, mapped_column
6from .._model_base import BaseMixins, SqlAlchemyBase
7from .._model_utils import guid
8from .._model_utils.auto_init import auto_init
9from ..recipe.category import Category, cookbooks_to_categories
10from ..recipe.tag import Tag, cookbooks_to_tags
11from ..recipe.tool import Tool, cookbooks_to_tools
13if TYPE_CHECKING: 13 ↛ 14line 13 didn't jump to line 14 because the condition on line 13 was never true
14 from ..group import Group
15 from .household import Household
18class CookBook(SqlAlchemyBase, BaseMixins):
19 __tablename__ = "cookbooks"
20 __table_args__: tuple[UniqueConstraint, ...] = (
21 UniqueConstraint("slug", "group_id", name="cookbook_slug_group_id_key"),
22 )
24 id: Mapped[guid.GUID] = mapped_column(guid.GUID, primary_key=True, default=guid.GUID.generate)
25 position: Mapped[int] = mapped_column(Integer, nullable=False, default=1)
27 group_id: Mapped[guid.GUID | None] = mapped_column(guid.GUID, ForeignKey("groups.id"), index=True)
28 group: Mapped[Optional["Group"]] = orm.relationship("Group", back_populates="cookbooks")
29 household_id: Mapped[guid.GUID | None] = mapped_column(guid.GUID, ForeignKey("households.id"), index=True)
30 household: Mapped[Optional["Household"]] = orm.relationship("Household", back_populates="cookbooks")
32 name: Mapped[str] = mapped_column(String, nullable=False)
33 slug: Mapped[str] = mapped_column(String, nullable=False, index=True)
34 description: Mapped[str | None] = mapped_column(String, default="")
35 public: Mapped[str | None] = mapped_column(Boolean, default=False)
36 query_filter_string: Mapped[str] = mapped_column(String, nullable=False, default="")
38 # Old filters - deprecated in favor of query filter strings
39 categories: Mapped[list[Category]] = orm.relationship(
40 Category, secondary=cookbooks_to_categories, single_parent=True
41 )
42 require_all_categories: Mapped[bool | None] = mapped_column(Boolean, default=True)
44 tags: Mapped[list[Tag]] = orm.relationship(Tag, secondary=cookbooks_to_tags, single_parent=True)
45 require_all_tags: Mapped[bool | None] = mapped_column(Boolean, default=True)
47 tools: Mapped[list[Tool]] = orm.relationship(Tool, secondary=cookbooks_to_tools, single_parent=True)
48 require_all_tools: Mapped[bool | None] = mapped_column(Boolean, default=True)
50 @auto_init()
51 def __init__(self, **_) -> None:
52 pass
54 def update(self, *args, **kwarg):
55 self.__init__(*args, **kwarg)