Coverage for opt/mealie/lib/python3.12/site-packages/mealie/db/models/household/household_to_recipe.py: 61%
43 statements
« prev ^ index » next coverage.py v7.10.6, created at 2025-11-25 15:32 +0000
« prev ^ index » next coverage.py v7.10.6, created at 2025-11-25 15:32 +0000
1from datetime import datetime 1a
2from typing import TYPE_CHECKING 1a
4from sqlalchemy import Column, ForeignKey, UniqueConstraint, event 1a
5from sqlalchemy.engine.base import Connection 1a
6from sqlalchemy.ext.associationproxy import AssociationProxy, association_proxy 1a
7from sqlalchemy.orm import Mapped, mapped_column, relationship 1a
8from sqlalchemy.orm.session import Session 1a
10from mealie.db.models._model_utils.datetime import NaiveDateTime 1a
12from .._model_base import BaseMixins, SqlAlchemyBase 1a
13from .._model_utils.auto_init import auto_init 1a
14from .._model_utils.guid import GUID 1a
16if TYPE_CHECKING: 16 ↛ 17line 16 didn't jump to line 17 because the condition on line 16 was never true1a
17 from ..recipe import RecipeModel
18 from .household import Household
21class HouseholdToRecipe(SqlAlchemyBase, BaseMixins): 1a
22 __tablename__ = "households_to_recipes" 1a
23 __table_args__ = (UniqueConstraint("household_id", "recipe_id", name="household_id_recipe_id_key"),) 1a
24 id: Mapped[GUID] = mapped_column(GUID, primary_key=True, default=GUID.generate) 1a
26 household: Mapped["Household"] = relationship("Household", viewonly=True) 1a
27 household_id = Column(GUID, ForeignKey("households.id"), index=True, primary_key=True) 1a
28 recipe: Mapped["RecipeModel"] = relationship("RecipeModel", viewonly=True) 1a
29 recipe_id = Column(GUID, ForeignKey("recipes.id"), index=True, primary_key=True) 1a
30 group_id: AssociationProxy[GUID] = association_proxy("household", "group_id") 1a
32 last_made: Mapped[datetime | None] = mapped_column(NaiveDateTime) 1a
34 @auto_init() 1a
35 def __init__(self, **_) -> None: 1a
36 pass
39def update_recipe_last_made(session: Session, target: HouseholdToRecipe): 1a
40 if not target.last_made:
41 return
43 from mealie.db.models.recipe.recipe import RecipeModel
45 recipe = session.query(RecipeModel).filter(RecipeModel.id == target.recipe_id).first()
46 if not recipe:
47 return
49 recipe.last_made = recipe.last_made or target.last_made
50 recipe.last_made = max(recipe.last_made, target.last_made)
53@event.listens_for(HouseholdToRecipe, "after_insert") 1a
54@event.listens_for(HouseholdToRecipe, "after_update") 1a
55@event.listens_for(HouseholdToRecipe, "after_delete") 1a
56def update_recipe_rating_on_insert_or_delete(_, connection: Connection, target: HouseholdToRecipe): 1a
57 session = Session(bind=connection)
59 update_recipe_last_made(session, target)
60 session.commit()