Coverage for src/paperap/models/workflow/model.py: 100%

76 statements  

« prev     ^ index     » next       coverage.py v7.6.12, created at 2025-03-22 16:02 -0400

1""" 

2---------------------------------------------------------------------------- 

3 

4 METADATA: 

5 

6 File: workflow.py 

7 Project: paperap 

8 Created: 2025-03-04 

9 Version: 0.0.9 

10 Author: Jess Mann 

11 Email: jess@jmann.me 

12 Copyright (c) 2025 Jess Mann 

13 

14---------------------------------------------------------------------------- 

15 

16 LAST MODIFIED: 

17 

18 2025-03-04 By Jess Mann 

19 

20""" 

21 

22from __future__ import annotations 

23 

24from datetime import datetime 

25from typing import Any, Self 

26 

27from pydantic import Field 

28 

29from paperap.const import ( 

30 ScheduleDateFieldType, 

31 WorkflowActionType, 

32 WorkflowTriggerMatchingType, 

33 WorkflowTriggerSourceType, 

34 WorkflowTriggerType, 

35) 

36from paperap.models.abstract.model import StandardModel 

37from paperap.models.mixins.models import MatcherMixin 

38from paperap.models.workflow.queryset import WorkflowActionQuerySet, WorkflowQuerySet, WorkflowTriggerQuerySet 

39 

40 

41class WorkflowTrigger(StandardModel, MatcherMixin): 

42 """ 

43 Represents a workflow trigger in Paperless-NgX. 

44 """ 

45 

46 sources: list[WorkflowTriggerSourceType] = Field(default_factory=list) 

47 type: WorkflowTriggerType | None = None 

48 filter_path: str | None = None 

49 filter_filename: str | None = None 

50 filter_mailrule: str | None = None 

51 filter_has_tags: list[int] = Field(default_factory=list) 

52 filter_has_correspondent: int | None = None 

53 filter_has_document_type: int | None = None 

54 schedule_date_field: ScheduleDateFieldType | None = None 

55 schedule_date_custom_field: int | None = None 

56 schedule_offset_days: int = 0 

57 schedule_is_recurring: bool = False 

58 schedule_recurring_interval_days: int = 1 

59 

60 class Meta(StandardModel.Meta): 

61 queryset = WorkflowTriggerQuerySet 

62 

63 

64class WorkflowAction(StandardModel): 

65 """ 

66 Represents a workflow action in Paperless-NgX. 

67 """ 

68 

69 type: WorkflowActionType | None = None 

70 

71 # Assignment actions 

72 assign_title: str | None = None 

73 assign_tags: list[int] = Field(default_factory=list) 

74 assign_correspondent: int | None = None 

75 assign_document_type: int | None = None 

76 assign_storage_path: int | None = None 

77 assign_owner: int | None = None 

78 assign_view_users: list[int] = Field(default_factory=list) 

79 assign_view_groups: list[int] = Field(default_factory=list) 

80 assign_change_users: list[int] = Field(default_factory=list) 

81 assign_change_groups: list[int] = Field(default_factory=list) 

82 assign_custom_fields: list[int] = Field(default_factory=list) 

83 assign_custom_fields_values: dict[str, Any] = Field(default_factory=dict) 

84 

85 # Removal actions 

86 remove_all_tags: bool | None = None 

87 remove_tags: list[int] = Field(default_factory=list) 

88 remove_all_correspondents: bool | None = None 

89 remove_correspondents: list[int] = Field(default_factory=list) 

90 remove_all_document_types: bool | None = None 

91 remove_document_types: list[int] = Field(default_factory=list) 

92 remove_all_storage_paths: bool | None = None 

93 remove_storage_paths: list[int] = Field(default_factory=list) 

94 remove_custom_fields: list[int] = Field(default_factory=list) 

95 remove_all_custom_fields: bool | None = None 

96 remove_all_owners: bool | None = None 

97 remove_owners: list[int] = Field(default_factory=list) 

98 remove_all_permissions: bool | None = None 

99 remove_view_users: list[int] = Field(default_factory=list) 

100 remove_view_groups: list[int] = Field(default_factory=list) 

101 remove_change_users: list[int] = Field(default_factory=list) 

102 remove_change_groups: list[int] = Field(default_factory=list) 

103 

104 # Email action 

105 email: dict[str, Any] | None = None 

106 

107 # Webhook action 

108 webhook: dict[str, Any] | None = None 

109 

110 class Meta(StandardModel.Meta): 

111 queryset = WorkflowActionQuerySet 

112 

113 

114class Workflow(StandardModel): 

115 """ 

116 Represents a workflow in Paperless-NgX. 

117 """ 

118 

119 name: str 

120 order: int | None = None 

121 enabled: bool | None = None 

122 triggers: list[dict[str, Any]] = Field(default_factory=list) 

123 actions: list[dict[str, Any]] = Field(default_factory=list) 

124 

125 class Meta(StandardModel.Meta): 

126 """ 

127 Metadata for the Workflow model. 

128 """ 

129 

130 queryset = WorkflowQuerySet 

131 

132 

133class WorkflowRun(StandardModel): 

134 """ 

135 Represents a workflow run in Paperless-NgX. 

136 """ 

137 

138 workflow: int | None = None 

139 document: int | None = None 

140 type: WorkflowTriggerType | None = None 

141 run_at: datetime 

142 started: datetime | None = None 

143 finished: datetime | None = None 

144 status: str | None = None 

145 error: str | None = None