Configures ruff as the one stop linter and resolves warnings it raised

This commit is contained in:
Trenton H
2023-03-28 09:39:30 -07:00
parent 5869467db3
commit ce41ac9158
110 changed files with 507 additions and 491 deletions

View File

@@ -1,6 +1,4 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9 on 2015-12-20 19:10
from __future__ import unicode_literals
from django.db import migrations, models
from django.conf import settings
@@ -32,7 +30,7 @@ class Migration(migrations.Migration):
models.TextField(
db_index=(
"mysql" not in settings.DATABASES["default"]["ENGINE"]
)
),
),
),
("created", models.DateTimeField(auto_now_add=True)),

View File

@@ -1,6 +1,4 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9 on 2015-12-26 13:16
from __future__ import unicode_literals
from django.db import migrations, models
import django.utils.timezone
@@ -21,7 +19,8 @@ class Migration(migrations.Migration):
model_name="document",
name="created",
field=models.DateTimeField(
default=django.utils.timezone.now, editable=False
default=django.utils.timezone.now,
editable=False,
),
),
]

View File

@@ -1,6 +1,4 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9 on 2016-01-11 12:21
from __future__ import unicode_literals
from django.db import migrations, models
from django.template.defaultfilters import slugify
@@ -23,7 +21,8 @@ def move_sender_strings_to_sender_model(apps, schema_editor):
DOCUMENT_SENDER_MAP[document.pk],
created,
) = sender_model.objects.get_or_create(
name=document.sender, defaults={"slug": slugify(document.sender)}
name=document.sender,
defaults={"slug": slugify(document.sender)},
)

View File

@@ -1,6 +1,4 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9 on 2016-01-14 18:44
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion

View File

@@ -1,6 +1,4 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9 on 2016-01-23 03:13
from __future__ import unicode_literals
from django.db import migrations

View File

@@ -1,6 +1,4 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9 on 2016-01-23 04:30
from __future__ import unicode_literals
from django.db import migrations, models

View File

@@ -1,6 +1,4 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9 on 2016-01-26 21:14
from __future__ import unicode_literals
from django.db import migrations, models

View File

@@ -1,6 +1,4 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9 on 2016-01-29 22:58
from __future__ import unicode_literals
from django.db import migrations, models
@@ -33,7 +31,9 @@ class Migration(migrations.Migration):
model_name="document",
name="tags",
field=models.ManyToManyField(
blank=True, related_name="documents", to="documents.Tag"
blank=True,
related_name="documents",
to="documents.Tag",
),
),
]

View File

@@ -1,6 +1,4 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9 on 2016-02-14 00:40
from __future__ import unicode_literals
from django.db import migrations, models

View File

@@ -1,6 +1,4 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9 on 2016-02-27 17:54
from __future__ import unicode_literals
from django.db import migrations, models
@@ -42,7 +40,7 @@ class Migration(migrations.Migration):
(
"component",
models.PositiveIntegerField(
choices=[(1, "Consumer"), (2, "Mail Fetcher")]
choices=[(1, "Consumer"), (2, "Mail Fetcher")],
),
),
("created", models.DateTimeField(auto_now_add=True)),

View File

@@ -1,6 +1,4 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-03-03 19:29
from __future__ import unicode_literals
from django.db import migrations

View File

@@ -1,6 +1,4 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.2 on 2016-03-05 00:40
from __future__ import unicode_literals
import gnupg
import os
@@ -14,7 +12,7 @@ from django.db import migrations
from django.utils.termcolors import colorize as colourise # Spelling hurts me
class GnuPG(object):
class GnuPG:
"""
A handy singleton to use when handling encrypted files.
"""
@@ -28,17 +26,22 @@ class GnuPG(object):
@classmethod
def encrypted(cls, file_handle):
return cls.gpg.encrypt_file(
file_handle, recipients=None, passphrase=settings.PASSPHRASE, symmetric=True
file_handle,
recipients=None,
passphrase=settings.PASSPHRASE,
symmetric=True,
).data
def move_documents_and_create_thumbnails(apps, schema_editor):
os.makedirs(
os.path.join(settings.MEDIA_ROOT, "documents", "originals"), exist_ok=True
os.path.join(settings.MEDIA_ROOT, "documents", "originals"),
exist_ok=True,
)
os.makedirs(
os.path.join(settings.MEDIA_ROOT, "documents", "thumbnails"), exist_ok=True
os.path.join(settings.MEDIA_ROOT, "documents", "thumbnails"),
exist_ok=True,
)
documents = os.listdir(os.path.join(settings.MEDIA_ROOT, "documents"))
@@ -55,7 +58,7 @@ def move_documents_and_create_thumbnails(apps, schema_editor):
" in order."
"\n",
opts=("bold",),
)
),
)
try:
@@ -73,7 +76,7 @@ def move_documents_and_create_thumbnails(apps, schema_editor):
colourise("*", fg="green"),
colourise("Generating a thumbnail for", fg="white"),
colourise(f, fg="cyan"),
)
),
)
thumb_temp = tempfile.mkdtemp(prefix="paperless", dir=settings.SCRATCH_DIR)
@@ -95,7 +98,7 @@ def move_documents_and_create_thumbnails(apps, schema_editor):
"remove",
orig_target,
os.path.join(thumb_temp, "convert-%04d.png"),
)
),
).wait()
thumb_source = os.path.join(thumb_temp, "convert-0000.png")

View File

@@ -1,6 +1,4 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.4 on 2016-03-25 21:11
from __future__ import unicode_literals
from django.db import migrations, models
import django.utils.timezone

View File

@@ -1,6 +1,4 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.4 on 2016-03-28 19:09
from __future__ import unicode_literals
import gnupg
import hashlib
@@ -13,7 +11,7 @@ from django.template.defaultfilters import slugify
from django.utils.termcolors import colorize as colourise # Spelling hurts me
class GnuPG(object):
class GnuPG:
"""
A handy singleton to use when handling encrypted files.
"""
@@ -27,11 +25,14 @@ class GnuPG(object):
@classmethod
def encrypted(cls, file_handle):
return cls.gpg.encrypt_file(
file_handle, recipients=None, passphrase=settings.PASSPHRASE, symmetric=True
file_handle,
recipients=None,
passphrase=settings.PASSPHRASE,
symmetric=True,
).data
class Document(object):
class Document:
"""
Django's migrations restrict access to model methods, so this is a snapshot
of the methods that existed at the time this migration was written, since
@@ -49,9 +50,9 @@ class Document(object):
def __str__(self):
created = self.created.strftime("%Y%m%d%H%M%S")
if self.correspondent and self.title:
return "{}: {} - {}".format(created, self.correspondent, self.title)
return f"{created}: {self.correspondent} - {self.title}"
if self.correspondent or self.title:
return "{}: {}".format(created, self.correspondent or self.title)
return f"{created}: {self.correspondent or self.title}"
return str(created)
@property
@@ -60,7 +61,7 @@ class Document(object):
settings.MEDIA_ROOT,
"documents",
"originals",
"{:07}.{}.gpg".format(self.pk, self.file_type),
f"{self.pk:07}.{self.file_type}.gpg",
)
@property
@@ -88,7 +89,7 @@ def set_checksums(apps, schema_editor):
" order."
"\n",
opts=("bold",),
)
),
)
sums = {}
@@ -101,7 +102,7 @@ def set_checksums(apps, schema_editor):
colourise("*", fg="green"),
colourise("Generating a checksum for", fg="white"),
colourise(document.file_name, fg="cyan"),
)
),
)
with document.source_file as encrypted:
@@ -122,15 +123,16 @@ def set_checksums(apps, schema_editor):
fg="yellow",
),
doc1=colourise(
" * {} (id: {})".format(sums[checksum][1], sums[checksum][0]),
f" * {sums[checksum][1]} (id: {sums[checksum][0]})",
fg="red",
),
doc2=colourise(
" * {} (id: {})".format(document.file_name, document.pk), fg="red"
f" * {document.file_name} (id: {document.pk})",
fg="red",
),
code=colourise(
" $ echo 'DELETE FROM documents_document WHERE id = {pk};' | ./manage.py dbshell".format(
pk=document.pk
pk=document.pk,
),
fg="green",
),
@@ -171,7 +173,8 @@ class Migration(migrations.Migration):
model_name="document",
name="created",
field=models.DateTimeField(
db_index=True, default=django.utils.timezone.now
db_index=True,
default=django.utils.timezone.now,
),
),
migrations.AlterField(

View File

@@ -1,6 +1,4 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.2 on 2016-10-05 21:38
from __future__ import unicode_literals
from django.db import migrations, models

View File

@@ -1,6 +1,4 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.5 on 2017-03-25 15:58
from __future__ import unicode_literals
from django.db import migrations, models
from django.conf import settings

View File

@@ -1,6 +1,4 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.5 on 2017-05-12 05:07
from __future__ import unicode_literals
from django.db import migrations, models

View File

@@ -1,6 +1,4 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.5 on 2017-07-15 17:12
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion

View File

@@ -1,6 +1,4 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.5 on 2017-07-15 17:12
from __future__ import unicode_literals
from django.contrib.auth.models import User
from django.db import migrations

View File

@@ -1,6 +1,3 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
import django.utils.timezone
@@ -22,7 +19,9 @@ class Migration(migrations.Migration):
model_name="document",
name="added",
field=models.DateTimeField(
db_index=True, default=django.utils.timezone.now, editable=False
db_index=True,
default=django.utils.timezone.now,
editable=False,
),
),
migrations.RunPython(set_added_time_to_created_time),

View File

@@ -1,6 +1,4 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.10 on 2018-02-04 13:07
from __future__ import unicode_literals
from django.db import migrations, models

View File

@@ -6,7 +6,7 @@ from django.db import migrations, models
def set_filename(apps, schema_editor):
Document = apps.get_model("documents", "Document")
for doc in Document.objects.all():
file_name = "{:07}.{}".format(doc.pk, doc.file_type)
file_name = f"{doc.pk:07}.{doc.file_type}"
if doc.storage_type == "gpg":
file_name += ".gpg"

View File

@@ -10,5 +10,5 @@ class Migration(migrations.Migration):
]
operations = [
migrations.RunPython(migrations.RunPython.noop, migrations.RunPython.noop)
migrations.RunPython(migrations.RunPython.noop, migrations.RunPython.noop),
]

View File

@@ -1,5 +1,4 @@
# Generated by Django 3.1.3 on 2020-11-20 11:21
import mimetypes
import os
import magic
@@ -16,7 +15,7 @@ def source_path(self):
if self.filename:
fname = str(self.filename)
else:
fname = "{:07}.{}".format(self.pk, self.file_type)
fname = f"{self.pk:07}.{self.file_type}"
if self.storage_type == STORAGE_TYPE_GPG:
fname += ".gpg"

View File

@@ -73,7 +73,7 @@ class Migration(migrations.Migration):
(15, "Modified before"),
(16, "Modified after"),
(17, "Does not have tag"),
]
],
),
),
("value", models.CharField(max_length=128)),

View File

@@ -165,7 +165,9 @@ class Migration(migrations.Migration):
model_name="document",
name="created",
field=models.DateTimeField(
db_index=True, default=django.utils.timezone.now, verbose_name="created"
db_index=True,
default=django.utils.timezone.now,
verbose_name="created",
),
),
migrations.AlterField(
@@ -196,14 +198,18 @@ class Migration(migrations.Migration):
model_name="document",
name="mime_type",
field=models.CharField(
editable=False, max_length=256, verbose_name="mime type"
editable=False,
max_length=256,
verbose_name="mime type",
),
),
migrations.AlterField(
model_name="document",
name="modified",
field=models.DateTimeField(
auto_now=True, db_index=True, verbose_name="modified"
auto_now=True,
db_index=True,
verbose_name="modified",
),
),
migrations.AlterField(
@@ -234,7 +240,10 @@ class Migration(migrations.Migration):
model_name="document",
name="title",
field=models.CharField(
blank=True, db_index=True, max_length=128, verbose_name="title"
blank=True,
db_index=True,
max_length=128,
verbose_name="title",
),
),
migrations.AlterField(
@@ -373,7 +382,10 @@ class Migration(migrations.Migration):
model_name="savedviewfilterrule",
name="value",
field=models.CharField(
blank=True, max_length=128, null=True, verbose_name="value"
blank=True,
max_length=128,
null=True,
verbose_name="value",
),
),
migrations.AlterField(

View File

@@ -29,7 +29,7 @@ def archive_path_old(doc):
if doc.filename:
fname = archive_name_from_filename(doc.filename)
else:
fname = "{:07}.pdf".format(doc.pk)
fname = f"{doc.pk:07}.pdf"
return os.path.join(settings.ARCHIVE_DIR, fname)
@@ -48,7 +48,7 @@ def source_path(doc):
if doc.filename:
fname = str(doc.filename)
else:
fname = "{:07}{}".format(doc.pk, doc.file_type)
fname = f"{doc.pk:07}{doc.file_type}"
if doc.storage_type == STORAGE_TYPE_GPG:
fname += ".gpg" # pragma: no cover
@@ -67,7 +67,9 @@ def generate_unique_filename(doc, archive_filename=False):
while True:
new_filename = generate_filename(
doc, counter, archive_filename=archive_filename
doc,
counter,
archive_filename=archive_filename,
)
if new_filename == old_filename:
# still the same as before.
@@ -93,14 +95,16 @@ def generate_filename(doc, counter=0, append_gpg=True, archive_filename=False):
if doc.correspondent:
correspondent = pathvalidate.sanitize_filename(
doc.correspondent.name, replacement_text="-"
doc.correspondent.name,
replacement_text="-",
)
else:
correspondent = "none"
if doc.document_type:
document_type = pathvalidate.sanitize_filename(
doc.document_type.name, replacement_text="-"
doc.document_type.name,
replacement_text="-",
)
else:
document_type = "none"
@@ -111,9 +115,7 @@ def generate_filename(doc, counter=0, append_gpg=True, archive_filename=False):
document_type=document_type,
created=datetime.date.isoformat(doc.created),
created_year=doc.created.year if doc.created else "none",
created_month=f"{doc.created.month:02}"
if doc.created
else "none", # NOQA: E501
created_month=f"{doc.created.month:02}" if doc.created else "none",
created_day=f"{doc.created.day:02}" if doc.created else "none",
added=datetime.date.isoformat(doc.added),
added_year=doc.added.year if doc.added else "none",
@@ -128,7 +130,7 @@ def generate_filename(doc, counter=0, append_gpg=True, archive_filename=False):
except (ValueError, KeyError, IndexError):
logger.warning(
f"Invalid PAPERLESS_FILENAME_FORMAT: "
f"{settings.FILENAME_FORMAT}, falling back to default"
f"{settings.FILENAME_FORMAT}, falling back to default",
)
counter_str = f"_{counter:02}" if counter else ""
@@ -170,13 +172,17 @@ def create_archive_version(doc, retry_count=3):
parser: DocumentParser = parser_class(None, None)
try:
parse_wrapper(
parser, source_path(doc), doc.mime_type, os.path.basename(doc.filename)
parser,
source_path(doc),
doc.mime_type,
os.path.basename(doc.filename),
)
doc.content = parser.get_text()
if parser.get_archive_path() and os.path.isfile(parser.get_archive_path()):
doc.archive_filename = generate_unique_filename(
doc, archive_filename=True
doc,
archive_filename=True,
)
with open(parser.get_archive_path(), "rb") as f:
doc.archive_checksum = hashlib.md5(f.read()).hexdigest()
@@ -186,7 +192,7 @@ def create_archive_version(doc, retry_count=3):
doc.archive_checksum = None
logger.error(
f"Parser did not return an archive document for document "
f"ID:{doc.id}. Removing archive document."
f"ID:{doc.id}. Removing archive document.",
)
doc.save()
return
@@ -195,7 +201,7 @@ def create_archive_version(doc, retry_count=3):
logger.exception(
f"Unable to regenerate archive document for ID:{doc.id}. You "
f"need to invoke the document_archiver management command "
f"manually for that document."
f"manually for that document.",
)
doc.archive_checksum = None
doc.save()
@@ -233,7 +239,7 @@ def move_old_to_new_locations(apps, schema_editor):
old_path = archive_path_old(doc)
if doc.id not in affected_document_ids and not os.path.isfile(old_path):
raise ValueError(
f"Archived document ID:{doc.id} does not exist at: " f"{old_path}"
f"Archived document ID:{doc.id} does not exist at: {old_path}",
)
# check that we can regenerate affected archive versions
@@ -245,7 +251,7 @@ def move_old_to_new_locations(apps, schema_editor):
if not parser_class:
raise ValueError(
f"Document ID:{doc.id} has an invalid archived document, "
f"but no parsers are available. Cannot migrate."
f"but no parsers are available. Cannot migrate.",
)
for doc in Document.objects.filter(archive_checksum__isnull=False):
@@ -260,7 +266,7 @@ def move_old_to_new_locations(apps, schema_editor):
# Set archive path for unaffected files
doc.archive_filename = archive_name_from_filename(doc.filename)
Document.objects.filter(id=doc.id).update(
archive_filename=doc.archive_filename
archive_filename=doc.archive_filename,
)
# regenerate archive documents
@@ -281,13 +287,13 @@ def move_new_to_old_locations(apps, schema_editor):
raise ValueError(
f"Cannot migrate: Archive file name {old_archive_path} of "
f"document {doc.filename} would clash with another archive "
f"filename."
f"filename.",
)
old_archive_paths.add(old_archive_path)
if new_archive_path != old_archive_path and os.path.isfile(old_archive_path):
raise ValueError(
f"Cannot migrate: Cannot move {new_archive_path} to "
f"{old_archive_path}: file already exists."
f"{old_archive_path}: file already exists.",
)
for doc in Document.objects.filter(archive_checksum__isnull=False):

View File

@@ -61,7 +61,9 @@ class Migration(migrations.Migration):
model_name="tag",
name="color",
field=models.CharField(
default="#a6cee3", max_length=7, verbose_name="color"
default="#a6cee3",
max_length=7,
verbose_name="color",
),
),
migrations.RunPython(forward, reverse),

View File

@@ -25,5 +25,5 @@ class Migration(migrations.Migration):
]
operations = [
migrations.RunPython(remove_null_characters, migrations.RunPython.noop)
migrations.RunPython(remove_null_characters, migrations.RunPython.noop),
]

View File

@@ -14,7 +14,10 @@ class Migration(migrations.Migration):
model_name="savedview",
name="sort_field",
field=models.CharField(
blank=True, max_length=128, null=True, verbose_name="sort field"
blank=True,
max_length=128,
null=True,
verbose_name="sort field",
),
),
migrations.AlterField(

View File

@@ -14,7 +14,10 @@ class Migration(migrations.Migration):
model_name="savedviewfilterrule",
name="value",
field=models.CharField(
blank=True, max_length=255, null=True, verbose_name="value"
blank=True,
max_length=255,
null=True,
verbose_name="value",
),
),
]

View File

@@ -48,5 +48,5 @@ class Migration(migrations.Migration):
),
),
],
)
),
]

View File

@@ -46,12 +46,15 @@ class Migration(migrations.Migration):
# Drop the django-q tables entirely
# Must be done last or there could be references here
migrations.RunSQL(
"DROP TABLE IF EXISTS django_q_ormq", reverse_sql=migrations.RunSQL.noop
"DROP TABLE IF EXISTS django_q_ormq",
reverse_sql=migrations.RunSQL.noop,
),
migrations.RunSQL(
"DROP TABLE IF EXISTS django_q_schedule", reverse_sql=migrations.RunSQL.noop
"DROP TABLE IF EXISTS django_q_schedule",
reverse_sql=migrations.RunSQL.noop,
),
migrations.RunSQL(
"DROP TABLE IF EXISTS django_q_task", reverse_sql=migrations.RunSQL.noop
"DROP TABLE IF EXISTS django_q_task",
reverse_sql=migrations.RunSQL.noop,
),
]

View File

@@ -79,7 +79,8 @@ class Migration(migrations.Migration):
migrations.AddConstraint(
model_name="storagepath",
constraint=models.UniqueConstraint(
fields=("name", "owner"), name="documents_storagepath_unique_name_owner"
fields=("name", "owner"),
name="documents_storagepath_unique_name_owner",
),
),
migrations.AddConstraint(
@@ -93,7 +94,8 @@ class Migration(migrations.Migration):
migrations.AddConstraint(
model_name="tag",
constraint=models.UniqueConstraint(
fields=("name", "owner"), name="documents_tag_unique_name_owner"
fields=("name", "owner"),
name="documents_tag_unique_name_owner",
),
),
migrations.AddConstraint(

View File

@@ -43,7 +43,9 @@ class Migration(migrations.Migration):
model_name="note",
name="note",
field=models.TextField(
blank=True, help_text="Note for the document", verbose_name="content"
blank=True,
help_text="Note for the document",
verbose_name="content",
),
),
migrations.AlterField(