Repository Analysis

paperless-ngx/paperless-ngx

A community-supported supercharged document management system: scan, index and archive all your documents

12.2 Low AI signal View on GitHub
12.2
Adjusted Score
12.2
Raw Score
100%
Time Factor
2026-05-30
Last Push
41,722
Stars
Python
Language
233,623
Lines of Code
985
Files
2204
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 13HIGH 22MEDIUM 253LOW 1916

Pattern Findings

2204 matches across 16 categories. Click a row to expand file-level details.

Hyper-Verbose Identifiers1581 hits · 1450 pts
SeverityFileLineSnippet
LOWsrc-ui/src/app/utils/query-params.ts60export function transformLegacyFilterRules(
LOWsrc-ui/src/app/utils/query-params.ts103export function filterRulesFromQueryParams(
LOWsrc-ui/src/app/utils/query-params.ts151export function queryParamsFromFilterRules(filterRules: FilterRule[]): Params {
LOWsrc-ui/src/app/utils/http.ts1export function getFilenameFromContentDisposition(header: string): string {
LOWsrc-ui/src/app/utils/color.ts122export function estimateBrightnessForColor(colorHex: string) {
LOWsrc/paperless_ai/matching.py27def match_correspondents_by_name(names: list[str], user: User) -> list[Correspondent]:
LOWsrc/paperless_ai/matching.py36def match_document_types_by_name(names: list[str], user: User) -> list[DocumentType]:
LOWsrc/paperless_ai/matching.py45def match_storage_paths_by_name(names: list[str], user: User) -> list[StoragePath]:
LOWsrc/paperless_ai/chat.py25def _build_document_reference(
LOWsrc/paperless_ai/chat.py64def _format_chat_metadata_trailer(references: list[dict[str, int | str]]) -> str:
LOWsrc/paperless_ai/chat.py71def stream_chat_with_documents(query_str: str, documents: list[Document]):
LOWsrc/paperless_ai/indexing.py26def queue_llm_index_update_if_needed(*, rebuild: bool, reason: str) -> bool:
LOWsrc/paperless_ai/indexing.py52def get_or_create_storage_context(*, rebuild=False):
LOWsrc/paperless_ai/indexing.py148def remove_document_docstore_nodes(document: Document, index: "VectorStoreIndex"):
LOWsrc/paperless_ai/indexing.py252def llm_index_add_or_update_document(document: Document):
LOWsrc/paperless_ai/indexing.py268def llm_index_remove_document(document: Document):
LOWsrc/paperless_ai/ai_classifier.py88def get_ai_document_classification(
LOWsrc/paperless_ai/tests/test_embedding.py56def test_get_embedding_model_openai(mock_ai_config):
LOWsrc/paperless_ai/tests/test_embedding.py74def test_get_embedding_model_openai_blocks_internal_endpoint_when_disallowed(
LOWsrc/paperless_ai/tests/test_embedding.py87def test_get_embedding_model_huggingface(mock_ai_config):
LOWsrc/paperless_ai/tests/test_embedding.py103def test_get_embedding_model_invalid_backend(mock_ai_config):
LOWsrc/paperless_ai/tests/test_embedding.py113def test_get_embedding_dim_infers_and_saves(temp_llm_index_dir, mock_ai_config):
LOWsrc/paperless_ai/tests/test_embedding.py133def test_get_embedding_dim_reads_existing_meta(temp_llm_index_dir, mock_ai_config):
LOWsrc/paperless_ai/tests/test_embedding.py146def test_get_embedding_dim_raises_on_model_change(temp_llm_index_dir, mock_ai_config):
LOWsrc/paperless_ai/tests/test_embedding.py161def test_build_llm_index_text(mock_document):
LOWsrc/paperless_ai/tests/test_chat.py60def test_stream_chat_with_one_document_full_content(mock_document) -> None:
LOWsrc/paperless_ai/tests/test_chat.py97def test_stream_chat_with_multiple_documents_retrieval(patch_embed_nodes) -> None:
LOWsrc/paperless_ai/tests/test_chat.py167def test_stream_chat_no_matching_nodes() -> None:
LOWsrc/paperless_ai/tests/test_ai_indexing.py78def test_update_llm_index_removes_meta(
LOWsrc/paperless_ai/tests/test_ai_indexing.py108def test_update_llm_index_partial_update(
LOWsrc/paperless_ai/tests/test_ai_indexing.py158def test_get_or_create_storage_context_raises_exception(
LOWsrc/paperless_ai/tests/test_ai_indexing.py169def test_load_or_build_index_builds_when_nodes_given(
LOWsrc/paperless_ai/tests/test_ai_indexing.py195def test_load_or_build_index_raises_exception_when_no_nodes(
LOWsrc/paperless_ai/tests/test_ai_indexing.py214def test_load_or_build_index_succeeds_when_nodes_given(
LOWsrc/paperless_ai/tests/test_ai_indexing.py240def test_add_or_update_document_updates_existing_entry(
LOWsrc/paperless_ai/tests/test_ai_indexing.py252def test_remove_document_deletes_node_from_docstore(
LOWsrc/paperless_ai/tests/test_ai_indexing.py267def test_update_llm_index_no_documents(
LOWsrc/paperless_ai/tests/test_ai_indexing.py286def test_queue_llm_index_update_if_needed_enqueues_when_idle_or_skips_recent() -> None:
LOWsrc/paperless_ai/tests/test_ai_indexing.py321def test_query_similar_documents(
LOWsrc/paperless_ai/tests/test_ai_indexing.py368def test_query_similar_documents_triggers_update_when_index_missing(
LOWsrc/paperless_ai/tests/test_matching.py43 def test_match_correspondents_by_name(self, mock_get_objects) -> None:
LOWsrc/paperless_ai/tests/test_matching.py51 def test_match_document_types_by_name(self, mock_get_objects) -> None:
LOWsrc/paperless_ai/tests/test_matching.py59 def test_match_storage_paths_by_name(self, mock_get_objects) -> None:
LOWsrc/paperless_ai/tests/test_matching.py66 def test_extract_unmatched_names(self) -> None:
LOWsrc/paperless_ai/tests/test_matching.py73 def test_match_tags_by_name_with_empty_names(self, mock_get_objects) -> None:
LOWsrc/paperless_ai/tests/test_matching.py80 def test_match_tags_with_fuzzy_matching(self, mock_get_objects) -> None:
LOWsrc/paperless_ai/tests/test_ai_classifier.py76def test_get_ai_document_classification_success(mock_run_llm_query, mock_document):
LOWsrc/paperless_ai/tests/test_ai_classifier.py98def test_get_ai_document_classification_failure(mock_run_llm_query, mock_document):
LOWsrc/paperless_ai/tests/test_ai_classifier.py115def test_use_rag_if_configured(
LOWsrc/paperless_ai/tests/test_ai_classifier.py134def test_use_without_rag_if_not_configured(
LOWsrc/paperless_ai/tests/test_ai_classifier.py153def test_prompt_with_without_rag(mock_document):
LOWsrc/paperless_ai/tests/test_ai_classifier.py166def test_get_context_for_document(
LOWsrc/paperless_ai/tests/test_ai_classifier.py183def test_get_context_for_document_no_similar_docs(mock_document):
LOWsrc/paperless_ai/tests/test_client.py65def test_get_llm_openai_blocks_internal_endpoint_when_disallowed(mock_ai_config):
LOWsrc/paperless_ai/tests/test_client.py76def test_get_llm_unsupported_backend(mock_ai_config):
LOWsrc/paperless/signals.py35def handle_social_account_updated(sender, request, sociallogin, **kwargs):
LOWsrc/paperless/db_cache.py8def custom_get_query_cache_key(compiler):
LOWsrc/paperless/db_cache.py12def custom_get_table_cache_key(db_alias, table):
LOWsrc/paperless/adapter.py68 def get_reset_password_from_key_url(self, key):
LOWsrc/paperless/checks.py162 def _email_certificate_validate():
1521 more matches not shown…
Decorative Section Separators218 hits · 732 pts
SeverityFileLineSnippet
MEDIUM.github/workflows/ci-release.yml191 # ---------------------------------------------------------------------------
MEDIUM.github/workflows/ci-release.yml193 # ---------------------------------------------------------------------------
MEDIUMsrc/paperless/celery.py13# ---------------------------------------------------------------------------
MEDIUMsrc/paperless/celery.py19# ---------------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/mail.py448 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/mail.py450 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/mail.py93 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/mail.py95 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/mail.py135 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/mail.py137 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/mail.py163 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/mail.py165 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/mail.py189 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/mail.py191 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/mail.py284 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/mail.py286 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/mail.py319 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/mail.py321 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/tesseract.py97 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/tesseract.py99 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/tesseract.py109 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/tesseract.py111 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/tesseract.py136 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/tesseract.py138 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/tesseract.py143 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/tesseract.py145 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/tesseract.py78 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/tesseract.py80 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/tesseract.py156 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/tesseract.py158 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/tika.py90 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/tika.py92 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/tika.py137 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/tika.py139 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/tika.py164 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/tika.py166 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/tika.py205 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/tika.py207 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/tika.py280 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/tika.py282 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/tika.py315 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/tika.py317 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/tika.py396 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/tika.py398 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/remote.py92 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/remote.py94 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/remote.py151 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/remote.py153 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/remote.py179 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/remote.py181 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/remote.py204 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/remote.py206 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/remote.py246 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/remote.py248 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/remote.py268 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/remote.py270 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/remote.py357 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/remote.py359 # ------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/registry.py47# ---------------------------------------------------------------------------
MEDIUMsrc/paperless/parsers/registry.py49# ---------------------------------------------------------------------------
158 more matches not shown…
Hallucination Indicators13 hits · 130 pts
SeverityFileLineSnippet
CRITICALsrc-ui/src/app/services/document-list-view.service.ts271 if (!this.router.routerState.snapshot.url.includes('/view/')) {
CRITICALsrc-ui/src/app/services/document-list-view.service.ts333 replaceUrl: !this.router.routerState.snapshot.url.includes('?'), // in case navigating from params-less /d
CRITICALsrc/paperless/validators.py4from django.core.exceptions import ValidationError
CRITICALsrc/paperless_mail/tests/test_mail.py1256 self.mailMocker.bogus_mailbox.folder.list.assert_called_once()
CRITICALsrc/paperless_mail/tests/test_mail.py1289 self.mailMocker.bogus_mailbox.folder.list.assert_called_once()
CRITICALsrc/documents/models.py9from django.core.exceptions import ValidationError
CRITICALsrc/documents/validators.py3from django.core.exceptions import ValidationError
CRITICALsrc/documents/serialisers.py19from django.core.exceptions import ValidationError
CRITICALsrc/documents/filters.py15from django.core.exceptions import FieldError
CRITICALsrc/documents/views.py326 ) and self.request.user.ui_settings.settings.get("language"):
CRITICALsrc/documents/views.py327 lang = self.request.user.ui_settings.settings.get("language")
CRITICALsrc/documents/tests/test_bulk_edit.py721 mock_consume_file.return_value.set.return_value.apply_async.assert_called_once()
CRITICALsrc/documents/tests/test_api_document_versions.py11from django.core.exceptions import FieldError
Excessive Try-Catch Wrapping122 hits · 120 pts
SeverityFileLineSnippet
LOWdocker/rootfs/usr/local/bin/wait-for-redis.py44 except Exception as e:
LOWdocs/development.md544 except Exception as e:
LOWsrc/paperless/utils.py151 except Exception:
LOWsrc/paperless/utils.py160 except Exception as e:
LOWsrc/paperless/parsers/mail.py494 except Exception as err:
LOWsrc/paperless/parsers/mail.py528 except Exception as err:
LOWsrc/paperless/parsers/mail.py601 except Exception as err:
LOWsrc/paperless/parsers/mail.py729 except Exception as err:
LOWsrc/paperless/parsers/mail.py827 except Exception as err:
LOWsrc/paperless/parsers/tesseract.py219 except Exception as e:
LOWsrc/paperless/parsers/tesseract.py232 except Exception as e:
LOWsrc/paperless/parsers/tesseract.py363 except Exception as e:
LOWsrc/paperless/parsers/tesseract.py406 except Exception as e:
LOWsrc/paperless/parsers/tesseract.py429 except Exception as e:
LOWsrc/paperless/parsers/tesseract.py547 except Exception as e:
LOWsrc/paperless/parsers/tesseract.py560 except Exception as e:
LOWsrc/paperless/parsers/tesseract.py645 except Exception as e:
LOWsrc/paperless/parsers/tesseract.py648 except Exception as e:
LOWsrc/paperless/parsers/tika.py262 except Exception as err:
LOWsrc/paperless/parsers/tika.py388 except Exception as e:
LOWsrc/paperless/parsers/tika.py449 except Exception as err:
LOWsrc/paperless/parsers/remote.py427 except Exception as e:
LOWsrc/paperless/parsers/registry.py239 except Exception:
LOWsrc/paperless/parsers/utils.py62 except Exception:
LOWsrc/paperless/parsers/utils.py105 except Exception:
LOWsrc/paperless/parsers/utils.py168 except Exception as e:
LOWsrc/paperless/parsers/utils.py208 except Exception as e:
LOWsrc/paperless/parsers/utils.py240 except Exception as e:
LOWsrc/paperless_mail/mail.py230 except Exception as e:
LOWsrc/paperless_mail/mail.py293 except Exception:
LOWsrc/paperless_mail/mail.py472 except Exception as e:
LOWsrc/paperless_mail/mail.py596 except Exception as e:
LOWsrc/paperless_mail/mail.py602 except Exception as e:
LOWsrc/paperless_mail/mail.py638 except Exception as e:
LOWsrc/paperless_mail/mail.py662 except Exception as err:
LOWsrc/paperless_mail/mail.py706 except Exception as e:
LOWsrc/documents/classifier.py88 except Exception as e: # pragma: no cover
LOWsrc/documents/classifier.py171 except Exception as err:
LOWsrc/documents/tasks.py205 except Exception as e:
LOWsrc/documents/tasks.py392 except Exception:
LOWsrc/documents/tasks.py426 except Exception as e: # pragma: no cover
LOWsrc/documents/tasks.py722 except Exception as exc:
LOWsrc/documents/tasks.py760 except Exception as exc:
LOWsrc/documents/validators.py43 except Exception as e:
LOWsrc/documents/parsers.py119 except Exception as e: # pragma: no cover
LOWsrc/documents/consumer.py331 except Exception as e:
LOWsrc/documents/consumer.py400 except Exception as e:
LOWsrc/documents/consumer.py460 except Exception as e:
LOWsrc/documents/consumer.py562 except Exception as e:
LOWsrc/documents/consumer.py760 except Exception as e:
LOWsrc/documents/consumer.py849 except Exception as e:
LOWsrc/documents/consumer.py950 except Exception: # pragma: no cover
LOWsrc/documents/barcodes.py356 except Exception as e: # pragma: no cover
LOWsrc/documents/barcodes.py441 except Exception as e:
LOWsrc/documents/serialisers.py883 except Exception:
LOWsrc/documents/serialisers.py899 except Exception:
LOWsrc/documents/serialisers.py1755 except Exception as e:
LOWsrc/documents/bulk_edit.py385 except Exception as e:
LOWsrc/documents/bulk_edit.py497 except Exception as e:
LOWsrc/documents/bulk_edit.py544 except Exception as e:
62 more matches not shown…
Self-Referential Comments28 hits · 82 pts
SeverityFileLineSnippet
MEDIUMdocker/compose/docker-compose.sqlite.yml2# This file contains everything paperless needs to run.
MEDIUMdocker/compose/docker-compose.mariadb.yml2# This file contains everything paperless needs to run.
MEDIUMdocker/compose/docker-compose.postgres-tika.yml2# This file contains everything paperless needs to run.
MEDIUMdocker/compose/docker-compose.postgres.yml2# This file contains everything paperless needs to run.
MEDIUMdocker/compose/docker-compose.sqlite-tika.yml2# This file contains everything paperless needs to run.
MEDIUMdocker/compose/docker-compose.mariadb-tika.yml2# This file contains everything paperless needs to run.
MEDIUMdocker/compose/docker-compose.portainer.yml2# This file contains everything paperless needs to run.
MEDIUM…vcontainer/docker-compose.devcontainer.sqlite-tika.yml2# This file contains everything Paperless NGX needs to run.
MEDIUM…vcontainer/docker-compose.devcontainer.sqlite-tika.yml21# This file is intended only to be used through VSCOde devcontainers. See README.md
MEDIUMsrc/paperless/auth.py33 """This class is here to provide authentication to the angular dev server
MEDIUMsrc/paperless/tests/test_registry.py171 # Create a subclass and delete the specified method to break compliance.
MEDIUM…c/paperless/tests/settings/test_environment_parsers.py102 # Create a dummy file to resolve against
MEDIUMsrc/documents/consumer.py624 # Create a log entry for the version addition, if enabled
MEDIUMsrc/documents/barcodes.py209 # Create the split document tasks
MEDIUMsrc/documents/barcodes.py231 # This file is now two or more files
MEDIUMsrc/documents/barcodes.py354 # This file is really borked, allow the consumption to continue
MEDIUMsrc/documents/bulk_edit.py793 # Create a new version from the edited PDF rather than replacing in-place
MEDIUMsrc/documents/bulk_edit.py907 # Create a new version rather than modifying the root/original in place.
MEDIUMsrc/documents/bulk_edit.py993 # Create an instance if target doc doesn't have this field or append it to an existing one
MEDIUMsrc/documents/tests/test_workflows.py4661 # Create a test file to be consumed
MEDIUMsrc/documents/tests/test_workflows.py4669 # Create a ConsumableDocument
MEDIUMsrc/documents/tests/test_workflows.py4725 # Create a test file to be consumed
MEDIUMsrc/documents/tests/test_workflows.py4733 # Create a ConsumableDocument
MEDIUMsrc/documents/tests/test_api_app_config.py706 # Define a custom namespace "my:hack" and try to use it
MEDIUMsrc/documents/tests/test_management_importer.py382 # Create the zip file
MEDIUMsrc/documents/tests/test_file_handling.py306 # Create an identical document and ensure it is trashed under a new name
MEDIUMsrc/documents/management/commands/document_importer.py443 # Create a temporary directory for extracting a zip file into it, even if supplied source is no zip file to keep
MEDIUMsrc/documents/templating/filepath.py355 # Create the dummy document object with all fields filled in for validation purposes
Unused Imports79 hits · 71 pts
SeverityFileLineSnippet
LOWsrc/paperless_ai/embedding.py9
LOWsrc/paperless_ai/indexing.py20
LOWsrc/paperless/logging.py1
LOWsrc/paperless/consumers.py1
LOWsrc/paperless/__init__.py1
LOWsrc/paperless/__init__.py2
LOWsrc/paperless/__init__.py3
LOWsrc/paperless/__init__.py4
LOWsrc/paperless/__init__.py5
LOWsrc/paperless/parsers/mail.py14
LOWsrc/paperless/parsers/tesseract.py1
LOWsrc/paperless/parsers/tika.py10
LOWsrc/paperless/parsers/remote.py13
LOWsrc/paperless/parsers/registry.py33
LOWsrc/paperless/parsers/__init__.py36
LOWsrc/paperless/parsers/utils.py9
LOWsrc/paperless/parsers/text.py9
LOWsrc/paperless/tests/test_registry.py10
LOWsrc/paperless/tests/conftest.py11
LOWsrc/paperless/tests/test_checks_v3.py3
LOWsrc/paperless/tests/test_ocr_config.py3
LOWsrc/paperless/tests/test_parser_utils.py3
LOWsrc/paperless/tests/parsers/conftest.py7
LOWsrc/paperless/tests/parsers/test_remote_parser.py16
LOWsrc/paperless/tests/parsers/test_text_parser.py8
LOWsrc/paperless/tests/parsers/test_tesseract_parser.py9
LOW…/paperless/tests/parsers/test_convert_image_to_pdfa.py12
LOWsrc/paperless/tests/parsers/test_parse_modes.py12
LOWsrc/paperless_mail/tests/factories.py1
LOWsrc/documents/mail.py1
LOWsrc/documents/classifier.py1
LOWsrc/documents/__init__.py2
LOWsrc/documents/parsers.py1
LOWsrc/documents/apps.py35
LOWsrc/documents/bulk_download.py1
LOWsrc/documents/caching.py1
LOWsrc/documents/consumer.py195
LOWsrc/documents/versioning.py1
LOWsrc/documents/barcodes.py1
LOWsrc/documents/serialisers.py1
LOWsrc/documents/bulk_edit.py1
LOWsrc/documents/regex.py1
LOWsrc/documents/signals/handlers.py1
LOWsrc/documents/tests/test_share_link_bundles.py1
LOWsrc/documents/tests/test_management_consumer.py14
LOWsrc/documents/tests/conftest.py19
LOWsrc/documents/tests/test_consumer_archive.py3
LOWsrc/documents/tests/test_sanity_check.py7
LOWsrc/documents/tests/test_management.py1
LOWsrc/documents/tests/factories.py5
LOWsrc/documents/tests/test_api_document_versions.py1
LOWsrc/documents/tests/test_management_retagger.py5
LOW…documents/tests/management/test_management_base_cmd.py3
LOW…nts/tests/management/test_management_sanity_checker.py6
LOWsrc/documents/tests/search/conftest.py1
LOWsrc/documents/tests/search/test_tokenizer.py1
LOWsrc/documents/tests/search/test_schema.py1
LOWsrc/documents/tests/search/test_query.py1
LOWsrc/documents/management/commands/document_retagger.py1
LOWsrc/documents/management/commands/document_exporter.py30
19 more matches not shown…
Deep Nesting76 hits · 61 pts
SeverityFileLineSnippet
LOWdocker/rootfs/usr/local/bin/deduplicate.py52
LOWsrc/paperless_ai/indexing.py171
LOWsrc/paperless/validators.py183
LOWsrc/paperless/checks.py24
LOWsrc/paperless/utils.py118
LOWsrc/paperless/settings/parsers.py61
LOWsrc/paperless/parsers/tesseract.py266
LOWsrc/paperless/parsers/tika.py400
LOWsrc/paperless_mail/mail.py361
LOWsrc/paperless_mail/mail.py512
LOWsrc/paperless_mail/mail.py540
LOWsrc/paperless_mail/views.py87
LOWsrc/paperless_mail/tests/test_mail.py81
LOWsrc/paperless_mail/tests/test_mail.py172
LOWsrc/paperless_mail/tests/test_mail.py331
LOWsrc/documents/mail.py19
LOWsrc/documents/tasks.py124
LOWsrc/documents/tasks.py279
LOWsrc/documents/tasks.py436
LOWsrc/documents/double_sided.py39
LOWsrc/documents/matching.py169
LOWsrc/documents/matching.py642
LOWsrc/documents/consumer.py408
LOWsrc/documents/sanity_checker.py219
LOWsrc/documents/permissions.py93
LOWsrc/documents/barcodes.py397
LOWsrc/documents/serialisers.py191
LOWsrc/documents/serialisers.py849
LOWsrc/documents/serialisers.py1130
LOWsrc/documents/serialisers.py1462
LOWsrc/documents/serialisers.py1746
LOWsrc/documents/serialisers.py1785
LOWsrc/documents/serialisers.py2026
LOWsrc/documents/serialisers.py2844
LOWsrc/documents/bulk_edit.py287
LOWsrc/documents/bulk_edit.py433
LOWsrc/documents/bulk_edit.py613
LOWsrc/documents/bulk_edit.py745
LOWsrc/documents/bulk_edit.py875
LOWsrc/documents/bulk_edit.py967
LOWsrc/documents/filters.py254
LOWsrc/documents/filters.py471
LOWsrc/documents/filters.py637
LOWsrc/documents/views.py1599
LOWsrc/documents/views.py2821
LOWsrc/documents/views.py4548
LOWsrc/documents/signals/handlers.py342
LOWsrc/documents/signals/handlers.py434
LOWsrc/documents/signals/handlers.py751
LOWsrc/documents/signals/handlers.py854
LOWsrc/documents/signals/handlers.py1026
LOWsrc/documents/tests/test_management_exporter.py195
LOWsrc/documents/tests/test_consumer.py143
LOWsrc/documents/tests/test_consumer.py1366
LOWsrc/documents/tests/test_consumer.py1521
LOWsrc/documents/tests/test_api_bulk_edit.py1439
LOWsrc/documents/management/commands/document_retagger.py230
LOWsrc/documents/management/commands/document_importer.py71
LOWsrc/documents/management/commands/document_importer.py215
LOWsrc/documents/management/commands/document_importer.py282
16 more matches not shown…
Cross-File Repetition12 hits · 60 pts
SeverityFileLineSnippet
HIGHsrc/paperless/parsers/mail.py0return the mime types this parser handles. returns ------- dict[str, str] mapping of mime type to preferred file extensi
HIGHsrc/paperless/parsers/tika.py0return the mime types this parser handles. returns ------- dict[str, str] mapping of mime type to preferred file extensi
HIGHsrc/paperless/parsers/text.py0return the mime types this parser handles. returns ------- dict[str, str] mapping of mime type to preferred file extensi
HIGHsrc/paperless/parsers/mail.py0return the plain-text content extracted during parse. returns ------- str | none extracted text, or none if parse has no
HIGHsrc/paperless/parsers/tika.py0return the plain-text content extracted during parse. returns ------- str | none extracted text, or none if parse has no
HIGHsrc/paperless/parsers/text.py0return the plain-text content extracted during parse. returns ------- str | none extracted text, or none if parse has no
HIGH…c/paperless/tests/settings/test_environment_parsers.py0test that missing environment variables return provided defaults.
HIGH…c/paperless/tests/settings/test_environment_parsers.py0test that missing environment variables return provided defaults.
HIGH…c/paperless/tests/settings/test_environment_parsers.py0test that missing environment variables return provided defaults.
HIGH…c/paperless/tests/settings/test_environment_parsers.py0test that missing environment variable with no default returns none.
HIGH…c/paperless/tests/settings/test_environment_parsers.py0test that missing environment variable with no default returns none.
HIGH…c/paperless/tests/settings/test_environment_parsers.py0test that missing environment variable with no default returns none.
Docstring Block Structure7 hits · 35 pts
SeverityFileLineSnippet
HIGHsrc/paperless/settings/parsers.py14 Converts a string representation of truth to a boolean value. Recognizes 'true', '1', 't', 'y', 'yes' as True,
HIGHsrc/paperless/settings/parsers.py67 Parses a key-value string into a dictionary, applying defaults and casting types. Supports nested keys via dot
HIGHsrc/paperless/settings/parsers.py224 Get and parse a list from an environment variable or return a default. Args: key: Environment variable
HIGHsrc/paperless/settings/parsers.py266 Gets and validates an environment variable against a set of allowed choices. Args: env_key: The enviro
HIGHsrc/documents/utils.py148 Compute the SHA-256 checksum of a file. Reads the file in chunks to avoid loading the entire file into memory.
HIGHsrc/documents/templating/filters.py11 Format a date, datetime or str object into a localized string using Babel. Args: value (date | datetim
HIGHsrc/documents/search/_backend.py815 Get a batch context manager for bulk index operations. Use this for efficient bulk document updates/de
Redundant / Tautological Comments18 hits · 27 pts
SeverityFileLineSnippet
LOWinstall-paperless-ngx.sh64# Check if user has permissions to run Docker by trying to get the status of Docker (docker status).
LOWdocker/rootfs/usr/local/bin/deduplicate.py19 # Read file in chunks to handle large files efficiently
LOWsrc/paperless/validators.py234 # Check if any dangerous pattern is a substring of the style
LOWsrc/paperless/validators.py245 # Check if value starts with any dangerous scheme
LOWsrc/paperless/tests/parsers/test_mail_parser.py94 # Check if exception is raised when parsing fails.
LOWsrc/paperless/tests/parsers/test_mail_parser.py115 # Check if exception is raised when the mail is faulty.
LOWsrc/paperless/tests/parsers/test_mail_parser.py409 # Check if exception is raised when Tika cannot be reached.
LOWsrc/documents/classifier.py285 # Check if retraining is actually required.
LOWsrc/documents/matching.py378 # Check if any tag filters exist to determine if we need to load document tags
LOWsrc/documents/bulk_edit.py979 # Check if any documents are going to be removed from the current list of links and remove the symmetrical links
LOWsrc/documents/filters.py566 # Check if 1) custom field name matches, and 2) value satisfies condition
LOWsrc/documents/filters.py608 # Check if the operator is supported for the current data_type.
LOWsrc/documents/filters.py724 # Check if any of the requested IDs are missing.
LOWsrc/documents/signals/handlers.py907 # Check if document was soft deleted (moved to trash)
LOWsrc/documents/tests/date_parsing/test_date_parsing.py85 # Check if an error was logged
LOWsrc/documents/tests/date_parsing/test_date_parsing.py89 # Check if the specific error message is present
LOWsrc/documents/management/commands/manage_superuser.py33 # Check if there's already a user called admin
LOWsrc/documents/management/commands/manage_superuser.py42 # Check if any superuseruser
Fake / Example Data25 hits · 26 pts
SeverityFileLineSnippet
LOWdocs/changelog.md7054 thinking that everything is in Catalan because we had _Lorem ipsum_
LOWdocs/development.md414 author = "Acme Corp" # author / organisation
LOWdocs/development.md665 author = "Acme Corp"
LOW…il/document-history/document-history.component.spec.ts76 const correspondentName = 'John Doe'
LOW…il/document-history/document-history.component.spec.ts92 .mockReturnValue(of({ name: 'John Doe' }))
LOW…file-edit-dialog/profile-edit-dialog.component.spec.ts33 email: 'foo@bar.com',
LOW…stions-dropdown/suggestions-dropdown.component.spec.ts26 suggested_correspondents: ['John Doe'],
LOW…s/common/preview-popup/preview-popup.component.spec.ts21 content: 'Cupcake ipsum dolor sit amet ice cream.',
LOW…ument-card-large/document-card-large.component.spec.ts37 'Cupcake ipsum dolor sit amet ice cream. Donut shortbread cheesecake caramels tiramisu pastry caramels chocolate bar
LOW…ument-card-small/document-card-small.component.spec.ts26 'Cupcake ipsum dolor sit amet ice cream. Donut shortbread cheesecake caramels tiramisu pastry caramels chocolate bar
LOWsrc-ui/src/app/services/profile.service.spec.ts42 service.update({ email: 'foo@bar.com' }).subscribe()
LOWsrc-ui/src/app/services/profile.service.spec.ts48 email: 'foo@bar.com',
LOWsrc/paperless_ai/tests/test_ai_classifier.py80 "correspondents": ["John Doe"],
LOWsrc/paperless_ai/tests/test_ai_classifier.py90 assert result["correspondents"] == ["John Doe"]
LOWsrc/paperless_ai/tests/test_client.py96 "correspondents": ["John Doe"],
LOWsrc/paperless/parsers/__init__.py20 author = "Acme Corp"
LOWsrc/paperless/tests/test_adapter.py100 "email": "user@example.com",
LOWsrc/documents/tests/test_workflows.py3363 to="user@example.com",
LOWsrc/documents/tests/test_workflows.py3650 to="user@example.com",
LOWsrc/documents/tests/test_workflows.py4395 to="user@example.com",
LOWsrc/documents/tests/test_workflows.py4529 to="user@example.com",
LOWsrc/documents/tests/test_api_search.py156 content="Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
LOWsrc/documents/tests/test_api_search.py156 content="Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
LOWsrc/documents/tests/search/test_backend.py128 content="Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
LOWsrc/documents/tests/search/test_backend.py128 content="Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
Cross-Language Confusion3 hits · 18 pts
SeverityFileLineSnippet
HIGHsrc/documents/classifier.py305 # subtract 1 since -1 (null) is also part of the classes.
HIGH…/documents/management/commands/convert_mariadb_uuid.py21 old_field = models.CharField(null=null, max_length=36)
HIGH…/documents/management/commands/convert_mariadb_uuid.py24 new_field = models.UUIDField(null=null)
Over-Commented Block13 hits · 12 pts
SeverityFileLineSnippet
LOWdocker/compose/docker-compose.sqlite.yml1# Docker Compose file for running paperless from the Docker Hub.
LOWdocker/compose/docker-compose.mariadb.yml1# Docker Compose file for running paperless from the Docker Hub.
LOWdocker/compose/docker-compose.postgres-tika.yml1# Docker Compose file for running paperless from the docker container registry.
LOWdocker/compose/docker-compose.postgres.yml1# Docker Compose file for running paperless from the Docker Hub.
LOWdocker/compose/docker-compose.sqlite-tika.yml1# Docker Compose file for running paperless from the docker container registry.
LOWdocker/compose/docker-compose.mariadb-tika.yml1# docker compose file for running paperless from the Docker Hub.
LOWdocker/compose/docker-compose.portainer.yml1# Docker Compose file for running paperless from the Docker Hub.
LOW…vcontainer/docker-compose.devcontainer.sqlite-tika.yml1# Docker Compose file for developing Paperless NGX in VSCode DevContainers.
LOW.github/workflows/codeql-analysis.yml1# For most projects, this workflow file will not need changing; you simply need
LOWsrc-ui/playwright.config.ts41 use: { ...devices['Desktop Chrome'] },
LOWsrc-ui/playwright.config.ts61 // use: { ...devices['iPhone 12'] },
LOWsrc/paperless/settings/__init__.py41 load_dotenv(path)
LOWsrc/documents/signals/handlers.py461 msg = f"Document {instance!s}: Cannot rename file since target path {new_path} already exists."
Verbosity Indicators5 hits · 9 pts
SeverityFileLineSnippet
LOWsrc/documents/classifier.py246 # Step 1: Extract and preprocess training data from the database.
LOWsrc/documents/classifier.py324 # Step 2: vectorize data
LOWsrc/documents/classifier.py350 # Step 3: train the classifiers
LOWsrc/documents/templating/utils.py13 # Step 1: Match placeholders with single curly braces but not those with double braces
LOWsrc/documents/templating/utils.py16 # Step 2: Replace the placeholders with {{ var }} or {{ }}
AI Slop Vocabulary3 hits · 8 pts
SeverityFileLineSnippet
MEDIUMpyproject.toml14# TODO: Move certain things to groups and then utilize that further
MEDIUMsrc/paperless/parsers/tesseract.py243 # the whole text, so do not utilize it in that case
LOWsrc/documents/views.py2615 # if all is not true, just pass through the provided document ids
Overly Generic Function Names1 hit · 1 pts
SeverityFileLineSnippet
LOWsrc/documents/workflows/webhooks.py32 def handle_request(self, request: httpx.Request) -> httpx.Response: