Merge branch 'main' into dev

This commit is contained in:
Michael Shamoon
2022-04-25 10:33:40 -07:00
68 changed files with 1445 additions and 367 deletions

View File

@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: paperless-ngx\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-03-02 11:20-0800\n"
"PO-Revision-Date: 2022-03-14 23:41\n"
"PO-Revision-Date: 2022-04-12 15:26\n"
"Last-Translator: \n"
"Language-Team: Polish\n"
"Language: pl_PL\n"
@@ -60,7 +60,7 @@ msgstr "algorytm dopasowania"
#: documents/models.py:48
msgid "is insensitive"
msgstr "bez rozróżniania wielkości liter"
msgstr "bez rozróżniania wielkości znaków"
#: documents/models.py:61 documents/models.py:104
msgid "correspondent"
@@ -240,7 +240,7 @@ msgstr "użytkownik"
#: documents/models.py:317
msgid "show on dashboard"
msgstr "pokaż na pulpicie"
msgstr "pokaż na stronie głównej"
#: documents/models.py:320
msgid "show in sidebar"
@@ -638,7 +638,7 @@ msgstr "konto"
#: paperless_mail/models.py:119
msgid "folder"
msgstr "katalog"
msgstr "folder"
#: paperless_mail/models.py:122
msgid "Subfolders must be separated by dots."

View File

@@ -251,7 +251,8 @@ if _paperless_url:
if _allowed_hosts:
ALLOWED_HOSTS.append(_paperless_uri.hostname)
else:
ALLOWED_HOSTS = [_paperless_uri.hostname]
# always allow localhost. Necessary e.g. for healthcheck in docker.
ALLOWED_HOSTS = [_paperless_uri.hostname] + ["localhost"]
# The secret key has a default that should be fine so long as you're hosting
# Paperless on a closed network. However, if you're putting this anywhere

View File

@@ -1 +1 @@
__version__ = (1, 6, 0)
__version__ = (1, 7, 0)

View File

@@ -82,7 +82,7 @@ class MailRuleAdmin(admin.ModelAdmin):
),
"fields": (
"assign_title_from",
"assign_tag",
"assign_tags",
"assign_document_type",
"assign_correspondent_from",
"assign_correspondent",

View File

@@ -18,6 +18,7 @@ from imap_tools import MailboxFolderSelectError
from imap_tools import MailBoxUnencrypted
from imap_tools import MailMessage
from imap_tools import MailMessageFlags
from imap_tools.mailbox import MailBoxTls
from paperless_mail.models import MailAccount
from paperless_mail.models import MailRule
@@ -61,13 +62,13 @@ class FlagMailAction(BaseMailAction):
def get_rule_action(rule):
if rule.action == MailRule.AttachmentAction.FLAG:
if rule.action == MailRule.MailAction.FLAG:
return FlagMailAction()
elif rule.action == MailRule.AttachmentAction.DELETE:
elif rule.action == MailRule.MailAction.DELETE:
return DeleteMailAction()
elif rule.action == MailRule.AttachmentAction.MOVE:
elif rule.action == MailRule.MailAction.MOVE:
return MoveMailAction()
elif rule.action == MailRule.AttachmentAction.MARK_READ:
elif rule.action == MailRule.MailAction.MARK_READ:
return MarkReadMailAction()
else:
raise NotImplementedError("Unknown action.") # pragma: nocover
@@ -92,7 +93,7 @@ def get_mailbox(server, port, security):
if security == MailAccount.ImapSecurity.NONE:
mailbox = MailBoxUnencrypted(server, port)
elif security == MailAccount.ImapSecurity.STARTTLS:
mailbox = MailBox(server, port, starttls=True)
mailbox = MailBoxTls(server, port)
elif security == MailAccount.ImapSecurity.SSL:
mailbox = MailBox(server, port)
else:
@@ -280,7 +281,7 @@ class MailAccountHandler(LoggingMixin):
)
correspondent = self.get_correspondent(message, rule)
tag = rule.assign_tag
tag_ids = [tag.id for tag in rule.assign_tags.all()]
doc_type = rule.assign_document_type
processed_attachments = 0
@@ -343,7 +344,7 @@ class MailAccountHandler(LoggingMixin):
if correspondent
else None,
override_document_type_id=doc_type.id if doc_type else None,
override_tag_ids=[tag.id] if tag else None,
override_tag_ids=tag_ids,
task_name=att.filename[:100],
)

View File

@@ -0,0 +1,23 @@
# Generated by Django 3.2.12 on 2022-03-11 15:00
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("paperless_mail", "0008_auto_20210516_0940"),
]
operations = [
migrations.AddField(
model_name="mailrule",
name="assign_tags",
field=models.ManyToManyField(
blank=True,
related_name="mail_rules_multi",
to="documents.Tag",
verbose_name="assign this tag",
),
),
]

View File

@@ -0,0 +1,40 @@
# Generated by Django 3.2.12 on 2022-03-11 15:02
from django.db import migrations
def migrate_tag_to_tags(apps, schema_editor):
# Manual data migration, see
# https://docs.djangoproject.com/en/3.2/topics/migrations/#data-migrations
#
# Copy the assign_tag property to the new assign_tags set if it exists.
MailRule = apps.get_model("paperless_mail", "MailRule")
for mail_rule in MailRule.objects.all():
if mail_rule.assign_tag:
mail_rule.assign_tags.add(mail_rule.assign_tag)
mail_rule.save()
def migrate_tags_to_tag(apps, schema_editor):
# Manual data migration, see
# https://docs.djangoproject.com/en/3.2/topics/migrations/#data-migrations
#
# Copy the unique value in the assign_tags set to the old assign_tag property.
# Do nothing if the tag is not unique.
MailRule = apps.get_model("paperless_mail", "MailRule")
for mail_rule in MailRule.objects.all():
tags = mail_rule.assign_tags.all()
if len(tags) == 1:
mail_rule.assign_tag = tags[0]
mail_rule.save()
class Migration(migrations.Migration):
dependencies = [
("paperless_mail", "0009_mailrule_assign_tags"),
]
operations = [
migrations.RunPython(migrate_tag_to_tags, migrate_tags_to_tag),
]

View File

@@ -0,0 +1,17 @@
# Generated by Django 3.2.12 on 2022-03-11 15:18
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("paperless_mail", "0010_auto_20220311_1602"),
]
operations = [
migrations.RemoveField(
model_name="mailrule",
name="assign_tag",
),
]

View File

@@ -0,0 +1,20 @@
# Generated by Django 3.2.12 on 2022-03-11 16:21
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("paperless_mail", "0011_remove_mailrule_assign_tag"),
]
operations = [
migrations.AlterField(
model_name="mailrule",
name="assign_tags",
field=models.ManyToManyField(
blank=True, to="documents.Tag", verbose_name="assign this tag"
),
),
]

View File

@@ -0,0 +1,13 @@
# Generated by Django 4.0.4 on 2022-04-12 08:51
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("paperless_mail", "0009_alter_mailrule_action_alter_mailrule_folder"),
("paperless_mail", "0012_alter_mailrule_assign_tags"),
]
operations = []

View File

@@ -0,0 +1,27 @@
# Generated by Django 4.0.4 on 2022-04-18 22:57
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("paperless_mail", "0013_merge_20220412_1051"),
]
operations = [
migrations.AlterField(
model_name="mailrule",
name="action",
field=models.PositiveIntegerField(
choices=[
(1, "Delete"),
(2, "Move to specified folder"),
(3, "Mark as read, don't process read mails"),
(4, "Flag the mail, don't process flagged mails"),
],
default=3,
verbose_name="action",
),
),
]

View File

@@ -60,11 +60,11 @@ class MailRule(models.Model):
ATTACHMENTS_ONLY = 1, _("Only process attachments.")
EVERYTHING = 2, _("Process all files, including 'inline' " "attachments.")
class AttachmentAction(models.IntegerChoices):
DELETE = 1, _("Mark as read, don't process read mails")
MOVE = 2, _("Flag the mail, don't process flagged mails")
MARK_READ = 3, _("Move to specified folder")
FLAG = 4, _("Delete")
class MailAction(models.IntegerChoices):
DELETE = 1, _("Delete")
MOVE = 2, _("Move to specified folder")
MARK_READ = 3, _("Mark as read, don't process read mails")
FLAG = 4, _("Flag the mail, don't process flagged mails")
class TitleSource(models.IntegerChoices):
FROM_SUBJECT = 1, _("Use subject as title")
@@ -146,8 +146,8 @@ class MailRule(models.Model):
action = models.PositiveIntegerField(
_("action"),
choices=AttachmentAction.choices,
default=AttachmentAction.MARK_READ,
choices=MailAction.choices,
default=MailAction.MARK_READ,
)
action_parameter = models.CharField(
@@ -169,11 +169,9 @@ class MailRule(models.Model):
default=TitleSource.FROM_SUBJECT,
)
assign_tag = models.ForeignKey(
assign_tags = models.ManyToManyField(
document_models.Tag,
null=True,
blank=True,
on_delete=models.SET_NULL,
verbose_name=_("assign this tag"),
)

View File

@@ -308,10 +308,12 @@ class TestMail(DirectoriesMixin, TestCase):
)
account = MailAccount()
account.save()
rule = MailRule(
assign_title_from=MailRule.TitleSource.FROM_FILENAME,
account=account,
)
rule.save()
result = self.mail_account_handler.handle_message(message, rule)
@@ -355,10 +357,12 @@ class TestMail(DirectoriesMixin, TestCase):
)
account = MailAccount()
account.save()
rule = MailRule(
assign_title_from=MailRule.TitleSource.FROM_FILENAME,
account=account,
)
rule.save()
result = self.mail_account_handler.handle_message(message, rule)
@@ -381,10 +385,12 @@ class TestMail(DirectoriesMixin, TestCase):
)
account = MailAccount()
account.save()
rule = MailRule(
assign_title_from=MailRule.TitleSource.FROM_FILENAME,
account=account,
)
rule.save()
result = self.mail_account_handler.handle_message(message, rule)
@@ -406,11 +412,13 @@ class TestMail(DirectoriesMixin, TestCase):
)
account = MailAccount()
account.save()
rule = MailRule(
assign_title_from=MailRule.TitleSource.FROM_FILENAME,
account=account,
attachment_type=MailRule.AttachmentProcessing.EVERYTHING,
)
rule.save()
result = self.mail_account_handler.handle_message(message, rule)
@@ -440,12 +448,15 @@ class TestMail(DirectoriesMixin, TestCase):
for (pattern, matches) in tests:
matches.sort()
self.async_task.reset_mock()
account = MailAccount()
account = MailAccount(name=str(uuid.uuid4()))
account.save()
rule = MailRule(
name=str(uuid.uuid4()),
assign_title_from=MailRule.TitleSource.FROM_FILENAME,
account=account,
filter_attachment_filename=pattern,
)
rule.save()
result = self.mail_account_handler.handle_message(message, rule)
@@ -467,7 +478,7 @@ class TestMail(DirectoriesMixin, TestCase):
_ = MailRule.objects.create(
name="testrule",
account=account,
action=MailRule.AttachmentAction.MARK_READ,
action=MailRule.MailAction.MARK_READ,
)
self.assertEqual(len(self.bogus_mailbox.messages), 3)
@@ -490,7 +501,7 @@ class TestMail(DirectoriesMixin, TestCase):
_ = MailRule.objects.create(
name="testrule",
account=account,
action=MailRule.AttachmentAction.DELETE,
action=MailRule.MailAction.DELETE,
filter_subject="Invoice",
)
@@ -511,7 +522,7 @@ class TestMail(DirectoriesMixin, TestCase):
_ = MailRule.objects.create(
name="testrule",
account=account,
action=MailRule.AttachmentAction.FLAG,
action=MailRule.MailAction.FLAG,
filter_subject="Invoice",
)
@@ -534,7 +545,7 @@ class TestMail(DirectoriesMixin, TestCase):
_ = MailRule.objects.create(
name="testrule",
account=account,
action=MailRule.AttachmentAction.MOVE,
action=MailRule.MailAction.MOVE,
action_parameter="spam",
filter_subject="Claim",
)
@@ -580,7 +591,7 @@ class TestMail(DirectoriesMixin, TestCase):
_ = MailRule.objects.create(
name="testrule",
account=account,
action=MailRule.AttachmentAction.MOVE,
action=MailRule.MailAction.MOVE,
action_parameter="spam",
filter_subject="Claim",
)
@@ -601,7 +612,7 @@ class TestMail(DirectoriesMixin, TestCase):
_ = MailRule.objects.create(
name="testrule",
account=account,
action=MailRule.AttachmentAction.MOVE,
action=MailRule.MailAction.MOVE,
action_parameter="spam",
filter_subject="Claim",
order=1,
@@ -610,7 +621,7 @@ class TestMail(DirectoriesMixin, TestCase):
_ = MailRule.objects.create(
name="testrule2",
account=account,
action=MailRule.AttachmentAction.MOVE,
action=MailRule.MailAction.MOVE,
action_parameter="spam",
filter_subject="Claim",
order=2,
@@ -706,7 +717,7 @@ class TestMail(DirectoriesMixin, TestCase):
_ = MailRule.objects.create(
name="testrule",
account=account,
action=MailRule.AttachmentAction.MOVE,
action=MailRule.MailAction.MOVE,
action_parameter="spam",
)
@@ -731,7 +742,7 @@ class TestMail(DirectoriesMixin, TestCase):
name="testrule",
filter_from="amazon@amazon.de",
account=account,
action=MailRule.AttachmentAction.MOVE,
action=MailRule.MailAction.MOVE,
action_parameter="spam",
assign_correspondent_from=MailRule.CorrespondentSource.FROM_EMAIL,
)
@@ -768,7 +779,7 @@ class TestMail(DirectoriesMixin, TestCase):
rule = MailRule.objects.create(
name="testrule3",
account=account,
action=MailRule.AttachmentAction.DELETE,
action=MailRule.MailAction.DELETE,
filter_subject="Claim",
)