Coverage for opt/mealie/lib/python3.12/site-packages/mealie/db/models/group/report.py: 95%
38 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 datetime import datetime
2from typing import TYPE_CHECKING
4from pydantic import ConfigDict
5from sqlalchemy import ForeignKey, orm
6from sqlalchemy.orm import Mapped, mapped_column
7from sqlalchemy.sql.sqltypes import Boolean, String
9from mealie.db.models._model_base import BaseMixins, SqlAlchemyBase
11from .._model_utils.auto_init import auto_init
12from .._model_utils.datetime import NaiveDateTime, get_utc_now
13from .._model_utils.guid import GUID
15if TYPE_CHECKING: 15 ↛ 16line 15 didn't jump to line 16 because the condition on line 15 was never true
16 from .group import Group
19class ReportEntryModel(SqlAlchemyBase, BaseMixins):
20 __tablename__ = "report_entries"
21 id: Mapped[GUID] = mapped_column(GUID, primary_key=True, default=GUID.generate)
23 success: Mapped[bool | None] = mapped_column(Boolean, default=False)
24 message: Mapped[str] = mapped_column(String, nullable=True)
25 exception: Mapped[str] = mapped_column(String, nullable=True)
26 timestamp: Mapped[datetime] = mapped_column(NaiveDateTime, nullable=False, default=get_utc_now)
28 report_id: Mapped[GUID] = mapped_column(GUID, ForeignKey("group_reports.id"), nullable=False, index=True)
29 report: Mapped["ReportModel"] = orm.relationship("ReportModel", back_populates="entries")
31 @auto_init()
32 def __init__(self, **_) -> None:
33 pass
36class ReportModel(SqlAlchemyBase, BaseMixins):
37 __tablename__ = "group_reports"
38 id: Mapped[GUID] = mapped_column(GUID, primary_key=True, default=GUID.generate)
40 name: Mapped[str] = mapped_column(String, nullable=False)
41 status: Mapped[str] = mapped_column(String, nullable=False)
42 category: Mapped[str] = mapped_column(String, index=True, nullable=False)
43 timestamp: Mapped[datetime] = mapped_column(NaiveDateTime, nullable=False, default=get_utc_now)
45 entries: Mapped[list[ReportEntryModel]] = orm.relationship(
46 ReportEntryModel, back_populates="report", cascade="all, delete-orphan"
47 )
49 # Relationships
50 group_id: Mapped[GUID] = mapped_column(GUID, ForeignKey("groups.id"), nullable=False, index=True)
51 group: Mapped["Group"] = orm.relationship("Group", back_populates="group_reports", single_parent=True)
52 model_config = ConfigDict(exclude=["entries"])
54 @auto_init()
55 def __init__(self, **_) -> None:
56 pass