Backend disableable mail rules
This commit is contained in:
@@ -8,7 +8,7 @@ class TestMigrateWorkflow(TestMigrations):
|
|||||||
dependencies = (
|
dependencies = (
|
||||||
(
|
(
|
||||||
"paperless_mail",
|
"paperless_mail",
|
||||||
"0025_alter_mailaccount_owner_alter_mailrule_owner_and_more",
|
"0026_mailrule_enabled",
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ class MailRuleAdmin(GuardedModelAdmin):
|
|||||||
}
|
}
|
||||||
|
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
(None, {"fields": ("name", "order", "account", "folder")}),
|
(None, {"fields": ("name", "order", "account", "enabled", "folder")}),
|
||||||
(
|
(
|
||||||
_("Filter"),
|
_("Filter"),
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -536,6 +536,9 @@ class MailAccountHandler(LoggingMixin):
|
|||||||
)
|
)
|
||||||
|
|
||||||
for rule in account.rules.order_by("order"):
|
for rule in account.rules.order_by("order"):
|
||||||
|
if not rule.enabled:
|
||||||
|
self.log.debug(f"Rule {rule}: Skipping disabled rule")
|
||||||
|
continue
|
||||||
try:
|
try:
|
||||||
total_processed_files += self._handle_mail_rule(
|
total_processed_files += self._handle_mail_rule(
|
||||||
M,
|
M,
|
||||||
|
|||||||
21
src/paperless_mail/migrations/0026_mailrule_enabled.py
Normal file
21
src/paperless_mail/migrations/0026_mailrule_enabled.py
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
# Generated by Django 5.1.1 on 2024-09-30 15:17
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
from django.db import models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
dependencies = [
|
||||||
|
(
|
||||||
|
"paperless_mail",
|
||||||
|
"0025_alter_mailaccount_owner_alter_mailrule_owner_and_more",
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="mailrule",
|
||||||
|
name="enabled",
|
||||||
|
field=models.BooleanField(default=True, verbose_name="enabled"),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -115,6 +115,8 @@ class MailRule(document_models.ModelWithOwner):
|
|||||||
verbose_name=_("account"),
|
verbose_name=_("account"),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
enabled = models.BooleanField(_("enabled"), default=True)
|
||||||
|
|
||||||
folder = models.CharField(
|
folder = models.CharField(
|
||||||
_("folder"),
|
_("folder"),
|
||||||
default="INBOX",
|
default="INBOX",
|
||||||
|
|||||||
@@ -74,6 +74,7 @@ class MailRuleSerializer(OwnedObjectSerializer):
|
|||||||
"id",
|
"id",
|
||||||
"name",
|
"name",
|
||||||
"account",
|
"account",
|
||||||
|
"enabled",
|
||||||
"folder",
|
"folder",
|
||||||
"filter_from",
|
"filter_from",
|
||||||
"filter_to",
|
"filter_to",
|
||||||
|
|||||||
@@ -1388,6 +1388,41 @@ class TestMail(
|
|||||||
self.assertEqual(len(self.mailMocker.bogus_mailbox.fetch("UNSEEN", False)), 0)
|
self.assertEqual(len(self.mailMocker.bogus_mailbox.fetch("UNSEEN", False)), 0)
|
||||||
self.assertEqual(len(self.mailMocker.bogus_mailbox.messages), 3)
|
self.assertEqual(len(self.mailMocker.bogus_mailbox.messages), 3)
|
||||||
|
|
||||||
|
def test_disabled_rule(self):
|
||||||
|
"""
|
||||||
|
GIVEN:
|
||||||
|
- Mail rule is disabled
|
||||||
|
WHEN:
|
||||||
|
- Mail account is handled
|
||||||
|
THEN:
|
||||||
|
- Should not process any messages
|
||||||
|
"""
|
||||||
|
account = MailAccount.objects.create(
|
||||||
|
name="test",
|
||||||
|
imap_server="",
|
||||||
|
username="admin",
|
||||||
|
password="secret",
|
||||||
|
)
|
||||||
|
MailRule.objects.create(
|
||||||
|
name="testrule",
|
||||||
|
account=account,
|
||||||
|
action=MailRule.MailAction.MARK_READ,
|
||||||
|
enabled=False,
|
||||||
|
)
|
||||||
|
|
||||||
|
self.mail_account_handler.handle_mail_account(account)
|
||||||
|
self.mailMocker.apply_mail_actions()
|
||||||
|
|
||||||
|
self.assertEqual(len(self.mailMocker.bogus_mailbox.messages), 3)
|
||||||
|
self.assertEqual(len(self.mailMocker.bogus_mailbox.fetch("UNSEEN", False)), 2)
|
||||||
|
|
||||||
|
self.mail_account_handler.handle_mail_account(account)
|
||||||
|
self.mailMocker.apply_mail_actions()
|
||||||
|
self.assertEqual(
|
||||||
|
len(self.mailMocker.bogus_mailbox.fetch("UNSEEN", False)),
|
||||||
|
2,
|
||||||
|
) # still 2
|
||||||
|
|
||||||
|
|
||||||
class TestManagementCommand(TestCase):
|
class TestManagementCommand(TestCase):
|
||||||
@mock.patch(
|
@mock.patch(
|
||||||
|
|||||||
Reference in New Issue
Block a user