mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-07-28 18:24:38 -05:00
Merge branch 'main' into dev
This commit is contained in:
@@ -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."
|
||||
|
@@ -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
|
||||
|
@@ -1 +1 @@
|
||||
__version__ = (1, 6, 0)
|
||||
__version__ = (1, 7, 0)
|
||||
|
@@ -82,7 +82,7 @@ class MailRuleAdmin(admin.ModelAdmin):
|
||||
),
|
||||
"fields": (
|
||||
"assign_title_from",
|
||||
"assign_tag",
|
||||
"assign_tags",
|
||||
"assign_document_type",
|
||||
"assign_correspondent_from",
|
||||
"assign_correspondent",
|
||||
|
@@ -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],
|
||||
)
|
||||
|
||||
|
23
src/paperless_mail/migrations/0009_mailrule_assign_tags.py
Normal file
23
src/paperless_mail/migrations/0009_mailrule_assign_tags.py
Normal 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",
|
||||
),
|
||||
),
|
||||
]
|
40
src/paperless_mail/migrations/0010_auto_20220311_1602.py
Normal file
40
src/paperless_mail/migrations/0010_auto_20220311_1602.py
Normal 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),
|
||||
]
|
@@ -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",
|
||||
),
|
||||
]
|
@@ -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"
|
||||
),
|
||||
),
|
||||
]
|
13
src/paperless_mail/migrations/0013_merge_20220412_1051.py
Normal file
13
src/paperless_mail/migrations/0013_merge_20220412_1051.py
Normal 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 = []
|
27
src/paperless_mail/migrations/0014_alter_mailrule_action.py
Normal file
27
src/paperless_mail/migrations/0014_alter_mailrule_action.py
Normal 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",
|
||||
),
|
||||
),
|
||||
]
|
@@ -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"),
|
||||
)
|
||||
|
||||
|
@@ -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",
|
||||
)
|
||||
|
||||
|
Reference in New Issue
Block a user