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

1import datetime 

2import enum 

3 

4from pydantic import ConfigDict, Field 

5from pydantic.types import UUID4 

6from sqlalchemy.orm import joinedload 

7from sqlalchemy.orm.interfaces import LoaderOption 

8 

9from mealie.db.models._model_utils.datetime import get_utc_now 

10from mealie.db.models.group import ReportModel 

11from mealie.schema._mealie import MealieModel 

12 

13 

14class ReportCategory(str, enum.Enum): 

15 backup = "backup" 

16 restore = "restore" 

17 migration = "migration" 

18 bulk_import = "bulk_import" 

19 

20 

21class ReportSummaryStatus(str, enum.Enum): 

22 in_progress = "in-progress" 

23 success = "success" 

24 failure = "failure" 

25 partial = "partial" 

26 

27 

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 = "" 

34 

35 

36class ReportEntryOut(ReportEntryCreate): 

37 id: UUID4 

38 model_config = ConfigDict(from_attributes=True) 

39 

40 

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 

47 

48 

49class ReportSummary(ReportCreate): 

50 id: UUID4 

51 

52 

53class ReportOut(ReportSummary): 

54 entries: list[ReportEntryOut] = [] 

55 model_config = ConfigDict(from_attributes=True) 

56 

57 @classmethod 

58 def loader_options(cls) -> list[LoaderOption]: 

59 return [joinedload(ReportModel.entries)]