From d3e6ef8c02b198abcb77980ae3f32632f9a064fb Mon Sep 17 00:00:00 2001 From: stumpylog <797416+stumpylog@users.noreply.github.com> Date: Thu, 27 Aug 2026 09:56:55 -0700 Subject: [PATCH] Chore: enable refurb (FURB) ruff rules FURB is part of ruff 0.16's expanded default rule set and is almost entirely autofixable. --- pyproject.toml | 1 + src/documents/consumer.py | 6 ++---- src/documents/parsers.py | 2 +- src/documents/tests/test_consumer.py | 2 +- src/documents/workflows/actions.py | 2 +- src/paperless/checks.py | 2 +- src/paperless/parsers/remote.py | 2 +- src/paperless/settings/parsers.py | 2 +- 8 files changed, 9 insertions(+), 10 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 4be0d75e5..c7758209e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -192,6 +192,7 @@ extend-select = [ "EXE", # https://docs.astral.sh/ruff/rules/#flake8-executable-exe "FBT", # https://docs.astral.sh/ruff/rules/#flake8-boolean-trap-fbt "FLY", # https://docs.astral.sh/ruff/rules/#flynt-fly + "FURB", # https://docs.astral.sh/ruff/rules/#refurb-furb "G201", # https://docs.astral.sh/ruff/rules/#flake8-logging-format-g "I", # https://docs.astral.sh/ruff/rules/#isort-i "ICN", # https://docs.astral.sh/ruff/rules/#flake8-import-conventions-icn diff --git a/src/documents/consumer.py b/src/documents/consumer.py index 79d0cfa8b..5f288bd09 100644 --- a/src/documents/consumer.py +++ b/src/documents/consumer.py @@ -216,7 +216,7 @@ class ConsumerPluginMixin: current_progress, max_progress, document_id=document_id, - owner_id=self.metadata.owner_id if self.metadata.owner_id else None, + owner_id=self.metadata.owner_id or None, users_can_view=(self.metadata.view_users or []) + (self.metadata.change_users or []), groups_can_view=(self.metadata.view_groups or []) @@ -674,9 +674,7 @@ class ConsumerPlugin( document=document, logging_group=self.logging_group, classifier=classifier, - original_file=self.unmodified_original - if self.unmodified_original - else self.working_copy, + original_file=self.unmodified_original or self.working_copy, ) # After everything is in the database, copy the files into diff --git a/src/documents/parsers.py b/src/documents/parsers.py index 69ee4e285..eda2e7bd3 100644 --- a/src/documents/parsers.py +++ b/src/documents/parsers.py @@ -41,7 +41,7 @@ def get_default_file_extension(mime_type: str) -> str: return supported[mime_type] ext = mimetypes.guess_extension(mime_type) - return ext if ext else "" + return ext or "" def is_file_ext_supported(ext: str) -> bool: diff --git a/src/documents/tests/test_consumer.py b/src/documents/tests/test_consumer.py index 69c5afb9d..119acfe49 100644 --- a/src/documents/tests/test_consumer.py +++ b/src/documents/tests/test_consumer.py @@ -1333,7 +1333,7 @@ class PreConsumeTestCase(DirectoriesMixin, GetConsumerMixin, TestCase): script_calls = [ call for call in m.call_args_list - if call.args and call.args[0] and call.args[0][0] not in ("pdftotext",) + if call.args and call.args[0] and call.args[0][0] != "pdftotext" ] self.assertEqual(script_calls, []) diff --git a/src/documents/workflows/actions.py b/src/documents/workflows/actions.py index be0921747..84a833d85 100644 --- a/src/documents/workflows/actions.py +++ b/src/documents/workflows/actions.py @@ -66,7 +66,7 @@ def build_workflow_action_context( else None ) - filename = document.original_file if document.original_file else "" + filename = document.original_file or "" return { "title": overrides.title if overrides and overrides.title diff --git a/src/paperless/checks.py b/src/paperless/checks.py index 5d9da91c4..1676abb34 100644 --- a/src/paperless/checks.py +++ b/src/paperless/checks.py @@ -241,7 +241,7 @@ def check_v3_minimum_upgrade_version( return [] logger = logging.getLogger(__name__) - last_applied = sorted(applied)[-1] if applied else "(none)" + last_applied = max(applied) if applied else "(none)" logger.error( "V3 upgrade check failed: last applied documents migration is %r. " "Expected '1075_workflowaction_order' (v2.20.15). " diff --git a/src/paperless/parsers/remote.py b/src/paperless/parsers/remote.py index 403ca0a10..86a38fc78 100644 --- a/src/paperless/parsers/remote.py +++ b/src/paperless/parsers/remote.py @@ -76,7 +76,7 @@ class RemoteEngineConfig: def engine_is_valid(self) -> bool: """Return True when the engine is known and fully configured.""" return ( - self.engine in ("azureai",) + self.engine == "azureai" and self.api_key is not None and not (self.engine == "azureai" and self.endpoint is None) ) diff --git a/src/paperless/settings/parsers.py b/src/paperless/settings/parsers.py index cb90dbfe4..5ef06d395 100644 --- a/src/paperless/settings/parsers.py +++ b/src/paperless/settings/parsers.py @@ -111,7 +111,7 @@ def parse_dict_from_str( return False settings: dict[str, Any] = copy.deepcopy(defaults) if defaults else {} - _type_map = type_map if type_map else {} + _type_map = type_map or {} if not env_str: return settings