]> git.ipfire.org Git - thirdparty/paperless-ngx.git/commitdiff
changes
authorJonas Winkler <17569239+jonaswinkler@users.noreply.github.com>
Tue, 21 Feb 2023 17:37:08 +0000 (18:37 +0100)
committerJonas Winkler <17569239+jonaswinkler@users.noreply.github.com>
Tue, 21 Feb 2023 17:37:08 +0000 (18:37 +0100)
src/paperless_mail/admin.py
src/paperless_mail/mail.py
src/paperless_mail/migrations/0018_processedmail.py
src/paperless_mail/models.py

index ce5341e4e64a8efb4182ec48d8f18ea750524c44..df7bac86adb80dcd2766540eff63314dfc7897f0 100644 (file)
@@ -3,6 +3,7 @@ from django.contrib import admin
 from django.utils.translation import gettext_lazy as _
 from paperless_mail.models import MailAccount
 from paperless_mail.models import MailRule
+from paperless_mail.models import ProcessedMail
 
 
 class MailAccountAdminForm(forms.ModelForm):
@@ -105,5 +106,31 @@ class MailRuleAdmin(admin.ModelAdmin):
     ordering = ["order"]
 
 
+class ProcessedMailAdmin(admin.ModelAdmin):
+    class Meta:
+
+        model = ProcessedMail
+        fields = "__all__"
+
+    list_display = ("rule", "processed", "status", "subject", "received")
+
+    ordering = ["-processed"]
+
+    readonly_fields = [
+        "owner",
+        "processed",
+        "received",
+        "status",
+        "subject",
+        "error",
+        "uid",
+        "folder",
+        "rule",
+    ]
+
+    list_filter = ("status",)
+
+
 admin.site.register(MailAccount, MailAccountAdmin)
 admin.site.register(MailRule, MailRuleAdmin)
+admin.site.register(ProcessedMail, ProcessedMailAdmin)
index b0cb7b75009926d7fc41a066d0b710ad62435fc5..a1ee55827fd425656f1bbc1a24512bb72374e6b0 100644 (file)
@@ -1,3 +1,4 @@
+import datetime
 import itertools
 import os
 import re
@@ -153,6 +154,8 @@ def apply_mail_action(
     result: str,
     rule_id: int,
     message_uid: str,
+    message_subject: str,
+    message_date: datetime.datetime,
 ):
     rule = MailRule.objects.get(pk=rule_id)
     account = MailAccount.objects.get(pk=rule.account.pk)
@@ -171,17 +174,23 @@ def apply_mail_action(
             action.post_consume(M, message_uid, rule.action_parameter)
 
         ProcessedMail.objects.create(
+            owner=rule.owner,
             rule=rule,
             folder=rule.folder,
             uid=message_uid,
+            subject=message_subject,
+            received=message_date,
             status="SUCCESS",
         )
 
     except Exception as e:
         ProcessedMail.objects.create(
+            owner=rule.owner,
             rule=rule,
             folder=rule.folder,
             uid=message_uid,
+            subject=message_subject,
+            received=message_date,
             status="FAILED",
             error=traceback.format_exc(),
         )
@@ -189,13 +198,23 @@ def apply_mail_action(
 
 
 @shared_task
-def error_callback(request, exc, tb, rule_id: int, message_uid: str):
+def error_callback(
+    request,
+    exc,
+    tb,
+    rule_id: int,
+    message_uid: str,
+    message_subject: str,
+    message_date: datetime.datetime,
+):
     rule = MailRule.objects.get(pk=rule_id)
 
     ProcessedMail.objects.create(
         rule=rule,
         folder=rule.folder,
         uid=message_uid,
+        subject=message_subject,
+        received=message_date,
         status="FAILED",
         error=traceback.format_exc(),
     )
@@ -204,14 +223,21 @@ def error_callback(request, exc, tb, rule_id: int, message_uid: str):
 def queue_consumption_tasks(
     consume_tasks: list[Signature],
     rule: MailRule,
-    message_uid: str,
+    message: MailMessage,
 ):
     mail_action_task = apply_mail_action.s(
         rule_id=rule.pk,
-        message_uid=message_uid,
+        message_uid=message.uid,
+        message_subject=message.subject,
+        message_date=message.date,
     )
     chord(header=consume_tasks, body=mail_action_task).on_error(
-        error_callback.s(rule_id=rule.pk, message_uid=message_uid),
+        error_callback.s(
+            rule_id=rule.pk,
+            message_uid=message.uid,
+            message_subject=message.subject,
+            message_date=message.date,
+        ),
     ).delay()
 
 
@@ -605,7 +631,7 @@ class MailAccountHandler(LoggingMixin):
                     f"by paperless",
                 )
 
-        queue_consumption_tasks(consume_tasks, rule, message.uid)
+        queue_consumption_tasks(consume_tasks, rule, message)
 
         return processed_attachments
 
@@ -663,7 +689,7 @@ class MailAccountHandler(LoggingMixin):
             override_owner_id=rule.owner.id if rule.owner else None,
         )
 
-        queue_consumption_tasks([consume_task], rule, message.uid)
+        queue_consumption_tasks([consume_task], rule, message)
 
         processed_elements = 1
         return processed_elements
index ff15ffb771e7fa999bd66cd488a05ab6be224ab7..18b44a93a6f7022edf246735b7c09eba8eac09b1 100644 (file)
@@ -1,8 +1,9 @@
-# Generated by Django 4.1.5 on 2023-02-21 12:48
+# Generated by Django 4.1.5 on 2023-02-21 17:15
 
 from django.conf import settings
 from django.db import migrations, models
 import django.db.models.deletion
+import django.utils.timezone
 
 
 class Migration(migrations.Migration):
@@ -27,6 +28,14 @@ class Migration(migrations.Migration):
                 ),
                 ("folder", models.CharField(max_length=256, verbose_name="folder")),
                 ("uid", models.CharField(max_length=256, verbose_name="folder")),
+                ("subject", models.CharField(max_length=256, verbose_name="subject")),
+                ("received", models.DateTimeField(verbose_name="received")),
+                (
+                    "processed",
+                    models.DateTimeField(
+                        default=django.utils.timezone.now, verbose_name="processed"
+                    ),
+                ),
                 ("status", models.CharField(max_length=256, verbose_name="status")),
                 (
                     "error",
index c702181ef19f33ae8f25d2fde737ac3976fea2b8..afe7a8ada071da793cc0b382176e7105ec38c57f 100644 (file)
@@ -1,5 +1,6 @@
 import documents.models as document_models
 from django.db import models
+from django.utils import timezone
 from django.utils.translation import gettext_lazy as _
 
 
@@ -223,6 +224,7 @@ class ProcessedMail(document_models.ModelWithOwner):
         null=False,
         blank=False,
         on_delete=models.CASCADE,
+        editable=False,
     )
 
     folder = models.CharField(
@@ -230,13 +232,36 @@ class ProcessedMail(document_models.ModelWithOwner):
         null=False,
         blank=False,
         max_length=256,
+        editable=False,
     )
 
     uid = models.CharField(
-        _("folder"),
+        _("uid"),
+        null=False,
+        blank=False,
+        max_length=256,
+        editable=False,
+    )
+
+    subject = models.CharField(
+        _("subject"),
         null=False,
         blank=False,
         max_length=256,
+        editable=False,
+    )
+
+    received = models.DateTimeField(
+        _("received"),
+        null=False,
+        blank=False,
+        editable=False,
+    )
+
+    processed = models.DateTimeField(
+        _("processed"),
+        default=timezone.now,
+        editable=False,
     )
 
     status = models.CharField(
@@ -244,10 +269,12 @@ class ProcessedMail(document_models.ModelWithOwner):
         null=False,
         blank=False,
         max_length=256,
+        editable=False,
     )
 
     error = models.TextField(
         _("error"),
         null=True,
         blank=True,
+        editable=False,
     )