mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-10-30 03:56:23 -05:00 
			
		
		
		
	Chore: Adds additional rules for Ruff linter (#5660)
This commit is contained in:
		| @@ -90,7 +90,6 @@ def set_suggestions_cache( | ||||
|     """ | ||||
|     if classifier is not None: | ||||
|         doc_key = get_suggestion_cache_key(document_id) | ||||
|         print(classifier.last_auto_type_hash) | ||||
|         cache.set( | ||||
|             doc_key, | ||||
|             SuggestionCacheData( | ||||
|   | ||||
| @@ -4,11 +4,14 @@ import pickle | ||||
| import re | ||||
| import warnings | ||||
| from collections.abc import Iterator | ||||
| from datetime import datetime | ||||
| from hashlib import sha256 | ||||
| from pathlib import Path | ||||
| from typing import TYPE_CHECKING | ||||
| from typing import Optional | ||||
|  | ||||
| if TYPE_CHECKING: | ||||
|     from datetime import datetime | ||||
|     from pathlib import Path | ||||
|  | ||||
| from django.conf import settings | ||||
| from django.core.cache import cache | ||||
| from sklearn.exceptions import InconsistentVersionWarning | ||||
|   | ||||
| @@ -69,8 +69,6 @@ class Command(ProgressBarMixin, BaseCommand): | ||||
|  | ||||
|     def handle(self, *args, **options): | ||||
|         self.handle_progress_bar_mixin(**options) | ||||
|         # Detect if we support color | ||||
|         color = self.style.ERROR("test") != "test" | ||||
|  | ||||
|         if options["inbox_only"]: | ||||
|             queryset = Document.objects.filter(tags__is_inbox_tag=True) | ||||
| @@ -96,7 +94,8 @@ class Command(ProgressBarMixin, BaseCommand): | ||||
|                     use_first=options["use_first"], | ||||
|                     suggest=options["suggest"], | ||||
|                     base_url=options["base_url"], | ||||
|                     color=color, | ||||
|                     stdout=self.stdout, | ||||
|                     style_func=self.style, | ||||
|                 ) | ||||
|  | ||||
|             if options["document_type"]: | ||||
| @@ -108,7 +107,8 @@ class Command(ProgressBarMixin, BaseCommand): | ||||
|                     use_first=options["use_first"], | ||||
|                     suggest=options["suggest"], | ||||
|                     base_url=options["base_url"], | ||||
|                     color=color, | ||||
|                     stdout=self.stdout, | ||||
|                     style_func=self.style, | ||||
|                 ) | ||||
|  | ||||
|             if options["tags"]: | ||||
| @@ -119,7 +119,8 @@ class Command(ProgressBarMixin, BaseCommand): | ||||
|                     replace=options["overwrite"], | ||||
|                     suggest=options["suggest"], | ||||
|                     base_url=options["base_url"], | ||||
|                     color=color, | ||||
|                     stdout=self.stdout, | ||||
|                     style_func=self.style, | ||||
|                 ) | ||||
|             if options["storage_path"]: | ||||
|                 set_storage_path( | ||||
| @@ -130,5 +131,6 @@ class Command(ProgressBarMixin, BaseCommand): | ||||
|                     use_first=options["use_first"], | ||||
|                     suggest=options["suggest"], | ||||
|                     base_url=options["base_url"], | ||||
|                     color=color, | ||||
|                     stdout=self.stdout, | ||||
|                     style_func=self.style, | ||||
|                 ) | ||||
|   | ||||
| @@ -19,7 +19,7 @@ def _process_document(doc_id): | ||||
|     if parser_class: | ||||
|         parser = parser_class(logging_group=None) | ||||
|     else: | ||||
|         print(f"{document} No parser for mime type {document.mime_type}") | ||||
|         print(f"{document} No parser for mime type {document.mime_type}")  # noqa: T201 | ||||
|         return | ||||
|  | ||||
|     try: | ||||
|   | ||||
| @@ -5,7 +5,9 @@ from typing import Union | ||||
|  | ||||
| from asgiref.sync import async_to_sync | ||||
| from channels.layers import get_channel_layer | ||||
| from channels_redis.pubsub import RedisPubSubChannelLayer | ||||
|  | ||||
| if TYPE_CHECKING: | ||||
|     from channels_redis.pubsub import RedisPubSubChannelLayer | ||||
|  | ||||
|  | ||||
| class ProgressStatusOptions(str, enum.Enum): | ||||
|   | ||||
| @@ -18,7 +18,6 @@ from django.db import close_old_connections | ||||
| from django.db import models | ||||
| from django.db.models import Q | ||||
| from django.dispatch import receiver | ||||
| from django.utils import termcolors | ||||
| from django.utils import timezone | ||||
| from filelock import FileLock | ||||
|  | ||||
| @@ -54,6 +53,26 @@ def add_inbox_tags(sender, document: Document, logging_group=None, **kwargs): | ||||
|     document.tags.add(*inbox_tags) | ||||
|  | ||||
|  | ||||
| def _suggestion_printer( | ||||
|     stdout, | ||||
|     style_func, | ||||
|     suggestion_type: str, | ||||
|     document: Document, | ||||
|     selected: MatchingModel, | ||||
|     base_url: Optional[str] = None, | ||||
| ): | ||||
|     """ | ||||
|     Smaller helper to reduce duplication when just outputting suggestions to the console | ||||
|     """ | ||||
|     doc_str = str(document) | ||||
|     if base_url is not None: | ||||
|         stdout.write(style_func.SUCCESS(doc_str)) | ||||
|         stdout.write(style_func.SUCCESS(f"{base_url}/documents/{document.pk}")) | ||||
|     else: | ||||
|         stdout.write(style_func.SUCCESS(f"{doc_str} [{document.pk}]")) | ||||
|     stdout.write(f"Suggest {suggestion_type}: {selected}") | ||||
|  | ||||
|  | ||||
| def set_correspondent( | ||||
|     sender, | ||||
|     document: Document, | ||||
| @@ -63,7 +82,8 @@ def set_correspondent( | ||||
|     use_first=True, | ||||
|     suggest=False, | ||||
|     base_url=None, | ||||
|     color=False, | ||||
|     stdout=None, | ||||
|     style_func=None, | ||||
|     **kwargs, | ||||
| ): | ||||
|     if document.correspondent and not replace: | ||||
| @@ -90,23 +110,14 @@ def set_correspondent( | ||||
|  | ||||
|     if selected or replace: | ||||
|         if suggest: | ||||
|             if base_url: | ||||
|                 print( | ||||
|                     termcolors.colorize(str(document), fg="green") | ||||
|                     if color | ||||
|                     else str(document), | ||||
|                 ) | ||||
|                 print(f"{base_url}/documents/{document.pk}") | ||||
|             else: | ||||
|                 print( | ||||
|                     ( | ||||
|                         termcolors.colorize(str(document), fg="green") | ||||
|                         if color | ||||
|                         else str(document) | ||||
|                     ) | ||||
|                     + f" [{document.pk}]", | ||||
|                 ) | ||||
|             print(f"Suggest correspondent {selected}") | ||||
|             _suggestion_printer( | ||||
|                 stdout, | ||||
|                 style_func, | ||||
|                 "correspondent", | ||||
|                 document, | ||||
|                 selected, | ||||
|                 base_url, | ||||
|             ) | ||||
|         else: | ||||
|             logger.info( | ||||
|                 f"Assigning correspondent {selected} to {document}", | ||||
| @@ -126,7 +137,8 @@ def set_document_type( | ||||
|     use_first=True, | ||||
|     suggest=False, | ||||
|     base_url=None, | ||||
|     color=False, | ||||
|     stdout=None, | ||||
|     style_func=None, | ||||
|     **kwargs, | ||||
| ): | ||||
|     if document.document_type and not replace: | ||||
| @@ -154,23 +166,14 @@ def set_document_type( | ||||
|  | ||||
|     if selected or replace: | ||||
|         if suggest: | ||||
|             if base_url: | ||||
|                 print( | ||||
|                     termcolors.colorize(str(document), fg="green") | ||||
|                     if color | ||||
|                     else str(document), | ||||
|                 ) | ||||
|                 print(f"{base_url}/documents/{document.pk}") | ||||
|             else: | ||||
|                 print( | ||||
|                     ( | ||||
|                         termcolors.colorize(str(document), fg="green") | ||||
|                         if color | ||||
|                         else str(document) | ||||
|                     ) | ||||
|                     + f" [{document.pk}]", | ||||
|                 ) | ||||
|             print(f"Suggest document type {selected}") | ||||
|             _suggestion_printer( | ||||
|                 stdout, | ||||
|                 style_func, | ||||
|                 "document type", | ||||
|                 document, | ||||
|                 selected, | ||||
|                 base_url, | ||||
|             ) | ||||
|         else: | ||||
|             logger.info( | ||||
|                 f"Assigning document type {selected} to {document}", | ||||
| @@ -189,7 +192,8 @@ def set_tags( | ||||
|     replace=False, | ||||
|     suggest=False, | ||||
|     base_url=None, | ||||
|     color=False, | ||||
|     stdout=None, | ||||
|     style_func=None, | ||||
|     **kwargs, | ||||
| ): | ||||
|     if replace: | ||||
| @@ -212,26 +216,16 @@ def set_tags( | ||||
|         ] | ||||
|         if not relevant_tags and not extra_tags: | ||||
|             return | ||||
|         doc_str = style_func.SUCCESS(str(document)) | ||||
|         if base_url: | ||||
|             print( | ||||
|                 termcolors.colorize(str(document), fg="green") | ||||
|                 if color | ||||
|                 else str(document), | ||||
|             ) | ||||
|             print(f"{base_url}/documents/{document.pk}") | ||||
|             stdout.write(doc_str) | ||||
|             stdout.write(f"{base_url}/documents/{document.pk}") | ||||
|         else: | ||||
|             print( | ||||
|                 ( | ||||
|                     termcolors.colorize(str(document), fg="green") | ||||
|                     if color | ||||
|                     else str(document) | ||||
|                 ) | ||||
|                 + f" [{document.pk}]", | ||||
|             ) | ||||
|             stdout.write(doc_str + style_func.SUCCESS(f" [{document.pk}]")) | ||||
|         if relevant_tags: | ||||
|             print("Suggest tags: " + ", ".join([t.name for t in relevant_tags])) | ||||
|             stdout.write("Suggest tags: " + ", ".join([t.name for t in relevant_tags])) | ||||
|         if extra_tags: | ||||
|             print("Extra tags: " + ", ".join([t.name for t in extra_tags])) | ||||
|             stdout.write("Extra tags: " + ", ".join([t.name for t in extra_tags])) | ||||
|     else: | ||||
|         if not relevant_tags: | ||||
|             return | ||||
| @@ -254,7 +248,8 @@ def set_storage_path( | ||||
|     use_first=True, | ||||
|     suggest=False, | ||||
|     base_url=None, | ||||
|     color=False, | ||||
|     stdout=None, | ||||
|     style_func=None, | ||||
|     **kwargs, | ||||
| ): | ||||
|     if document.storage_path and not replace: | ||||
| @@ -285,23 +280,14 @@ def set_storage_path( | ||||
|  | ||||
|     if selected or replace: | ||||
|         if suggest: | ||||
|             if base_url: | ||||
|                 print( | ||||
|                     termcolors.colorize(str(document), fg="green") | ||||
|                     if color | ||||
|                     else str(document), | ||||
|                 ) | ||||
|                 print(f"{base_url}/documents/{document.pk}") | ||||
|             else: | ||||
|                 print( | ||||
|                     ( | ||||
|                         termcolors.colorize(str(document), fg="green") | ||||
|                         if color | ||||
|                         else str(document) | ||||
|                     ) | ||||
|                     + f" [{document.pk}]", | ||||
|                 ) | ||||
|             print(f"Suggest storage directory {selected}") | ||||
|             _suggestion_printer( | ||||
|                 stdout, | ||||
|                 style_func, | ||||
|                 "storage directory", | ||||
|                 document, | ||||
|                 selected, | ||||
|                 base_url, | ||||
|             ) | ||||
|         else: | ||||
|             logger.info( | ||||
|                 f"Assigning storage path {selected} to {document}", | ||||
|   | ||||
| @@ -246,8 +246,6 @@ class TestBulkDownload(DirectoriesMixin, APITestCase): | ||||
|  | ||||
|         self.doc3.title = "Title 2 - Doc 3" | ||||
|         self.doc3.save() | ||||
|         print(self.doc3.archive_path) | ||||
|         print(self.doc3.archive_filename) | ||||
|  | ||||
|         response = self.client.post( | ||||
|             self.ENDPOINT, | ||||
|   | ||||
| @@ -88,10 +88,10 @@ class ConsumerThreadMixin(DocumentConsumeDelayMixin): | ||||
|     ): | ||||
|         eq = filecmp.cmp(input_doc.original_file, self.sample_file, shallow=False) | ||||
|         if not eq: | ||||
|             print("Consumed an INVALID file.") | ||||
|             print("Consumed an INVALID file.")  # noqa: T201 | ||||
|             raise ConsumerError("Incomplete File READ FAILED") | ||||
|         else: | ||||
|             print("Consumed a perfectly valid file.") | ||||
|             print("Consumed a perfectly valid file.")  # noqa: T201 | ||||
|  | ||||
|     def slow_write_file(self, target, incomplete=False): | ||||
|         with open(self.sample_file, "rb") as f: | ||||
| @@ -102,11 +102,11 @@ class ConsumerThreadMixin(DocumentConsumeDelayMixin): | ||||
|  | ||||
|         with open(target, "wb") as f: | ||||
|             # this will take 2 seconds, since the file is about 20k. | ||||
|             print("Start writing file.") | ||||
|             print("Start writing file.")  # noqa: T201 | ||||
|             for b in chunked(1000, pdf_bytes): | ||||
|                 f.write(b) | ||||
|                 sleep(0.1) | ||||
|             print("file completed.") | ||||
|             print("file completed.")  # noqa: T201 | ||||
|  | ||||
|  | ||||
| @override_settings( | ||||
|   | ||||
| @@ -196,7 +196,7 @@ class TestFuzzyMatchCommand(TestCase): | ||||
|         self.assertEqual(Document.objects.count(), 3) | ||||
|  | ||||
|         stdout, _ = self.call_command("--delete") | ||||
|         print(stdout) | ||||
|  | ||||
|         lines = [x.strip() for x in stdout.split("\n") if len(x.strip())] | ||||
|         self.assertEqual(len(lines), 3) | ||||
|         self.assertEqual( | ||||
|   | ||||
| @@ -1,16 +1,19 @@ | ||||
| from datetime import timedelta | ||||
| from pathlib import Path | ||||
| from typing import TYPE_CHECKING | ||||
| from unittest import mock | ||||
|  | ||||
| from django.contrib.auth.models import Group | ||||
| from django.contrib.auth.models import User | ||||
| from django.db.models import QuerySet | ||||
| from django.utils import timezone | ||||
| from guardian.shortcuts import assign_perm | ||||
| from guardian.shortcuts import get_groups_with_perms | ||||
| from guardian.shortcuts import get_users_with_perms | ||||
| from rest_framework.test import APITestCase | ||||
|  | ||||
| if TYPE_CHECKING: | ||||
|     from django.db.models import QuerySet | ||||
|  | ||||
| from documents import tasks | ||||
| from documents.data_models import ConsumableDocument | ||||
| from documents.data_models import DocumentSource | ||||
|   | ||||
| @@ -340,7 +340,6 @@ class DummyProgressManager: | ||||
|     def __init__(self, filename: str, task_id: Optional[str] = None) -> None: | ||||
|         self.filename = filename | ||||
|         self.task_id = task_id | ||||
|         print("hello world") | ||||
|         self.payloads = [] | ||||
|  | ||||
|     def __enter__(self): | ||||
|   | ||||
| @@ -1,3 +1,5 @@ | ||||
| import logging | ||||
|  | ||||
| from django.conf import settings | ||||
| from django.contrib import auth | ||||
| from django.contrib.auth.middleware import PersistentRemoteUserMiddleware | ||||
| @@ -6,6 +8,8 @@ from django.http import HttpRequest | ||||
| from django.utils.deprecation import MiddlewareMixin | ||||
| from rest_framework import authentication | ||||
|  | ||||
| logger = logging.getLogger("paperless.auth") | ||||
|  | ||||
|  | ||||
| class AutoLoginMiddleware(MiddlewareMixin): | ||||
|     def process_request(self, request: HttpRequest): | ||||
| @@ -35,7 +39,7 @@ class AngularApiAuthenticationOverride(authentication.BaseAuthentication): | ||||
|             and request.headers["Referer"].startswith("http://localhost:4200/") | ||||
|         ): | ||||
|             user = User.objects.filter(is_staff=True).first() | ||||
|             print(f"Auto-Login with user {user}") | ||||
|             logger.debug(f"Auto-Login with user {user}") | ||||
|             return (user, None) | ||||
|         else: | ||||
|             return None | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Trenton H
					Trenton H