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
« prev ^ index » next coverage.py v7.6.12, created at 2025-03-22 16:02 -0400
1"""
2----------------------------------------------------------------------------
4 METADATA:
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
14----------------------------------------------------------------------------
16 LAST MODIFIED:
18 2025-03-04 By Jess Mann
20"""
22from __future__ import annotations
24from datetime import datetime
25from typing import Any, Self
27from pydantic import Field
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
41class WorkflowTrigger(StandardModel, MatcherMixin):
42 """
43 Represents a workflow trigger in Paperless-NgX.
44 """
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
60 class Meta(StandardModel.Meta):
61 queryset = WorkflowTriggerQuerySet
64class WorkflowAction(StandardModel):
65 """
66 Represents a workflow action in Paperless-NgX.
67 """
69 type: WorkflowActionType | None = None
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)
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)
104 # Email action
105 email: dict[str, Any] | None = None
107 # Webhook action
108 webhook: dict[str, Any] | None = None
110 class Meta(StandardModel.Meta):
111 queryset = WorkflowActionQuerySet
114class Workflow(StandardModel):
115 """
116 Represents a workflow in Paperless-NgX.
117 """
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)
125 class Meta(StandardModel.Meta):
126 """
127 Metadata for the Workflow model.
128 """
130 queryset = WorkflowQuerySet
133class WorkflowRun(StandardModel):
134 """
135 Represents a workflow run in Paperless-NgX.
136 """
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