Enhancement: disable-able mail rules, add toggle to overview (#7810)

This commit is contained in:
shamoon
2024-09-30 19:42:19 -07:00
committed by GitHub
parent b9c1ba8a1d
commit 991c9b0ca4
19 changed files with 248 additions and 91 deletions

View File

@@ -53,7 +53,7 @@ class MailRuleAdmin(GuardedModelAdmin):
}
fieldsets = (
(None, {"fields": ("name", "order", "account", "folder")}),
(None, {"fields": ("name", "order", "account", "enabled", "folder")}),
(
_("Filter"),
{

View File

@@ -536,6 +536,9 @@ class MailAccountHandler(LoggingMixin):
)
for rule in account.rules.order_by("order"):
if not rule.enabled:
self.log.debug(f"Rule {rule}: Skipping disabled rule")
continue
try:
total_processed_files += self._handle_mail_rule(
M,

View 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"),
),
]

View File

@@ -115,6 +115,8 @@ class MailRule(document_models.ModelWithOwner):
verbose_name=_("account"),
)
enabled = models.BooleanField(_("enabled"), default=True)
folder = models.CharField(
_("folder"),
default="INBOX",

View File

@@ -74,6 +74,7 @@ class MailRuleSerializer(OwnedObjectSerializer):
"id",
"name",
"account",
"enabled",
"folder",
"filter_from",
"filter_to",

View File

@@ -1388,6 +1388,41 @@ class TestMail(
self.assertEqual(len(self.mailMocker.bogus_mailbox.fetch("UNSEEN", False)), 0)
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):
@mock.patch(