Coverage for opt/mealie/lib/python3.12/site-packages/mealie/schema/reports/reports.py: 100%
42 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
1import datetime
2import enum
4from pydantic import ConfigDict, Field
5from pydantic.types import UUID4
6from sqlalchemy.orm import joinedload
7from sqlalchemy.orm.interfaces import LoaderOption
9from mealie.db.models._model_utils.datetime import get_utc_now
10from mealie.db.models.group import ReportModel
11from mealie.schema._mealie import MealieModel
14class ReportCategory(str, enum.Enum):
15 backup = "backup"
16 restore = "restore"
17 migration = "migration"
18 bulk_import = "bulk_import"
21class ReportSummaryStatus(str, enum.Enum):
22 in_progress = "in-progress"
23 success = "success"
24 failure = "failure"
25 partial = "partial"
28class ReportEntryCreate(MealieModel):
29 report_id: UUID4
30 timestamp: datetime.datetime = Field(default_factory=get_utc_now)
31 success: bool = True
32 message: str
33 exception: str = ""
36class ReportEntryOut(ReportEntryCreate):
37 id: UUID4
38 model_config = ConfigDict(from_attributes=True)
41class ReportCreate(MealieModel):
42 timestamp: datetime.datetime = Field(default_factory=get_utc_now)
43 category: ReportCategory
44 group_id: UUID4
45 name: str
46 status: ReportSummaryStatus = ReportSummaryStatus.in_progress
49class ReportSummary(ReportCreate):
50 id: UUID4
53class ReportOut(ReportSummary):
54 entries: list[ReportEntryOut] = []
55 model_config = ConfigDict(from_attributes=True)
57 @classmethod
58 def loader_options(cls) -> list[LoaderOption]:
59 return [joinedload(ReportModel.entries)]