A community-supported supercharged document management system: scan, index and archive all your documents
2204 matches across 16 categories. Click a row to expand file-level details.
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | src-ui/src/app/utils/query-params.ts | 60 | export function transformLegacyFilterRules( |
| LOW | src-ui/src/app/utils/query-params.ts | 103 | export function filterRulesFromQueryParams( |
| LOW | src-ui/src/app/utils/query-params.ts | 151 | export function queryParamsFromFilterRules(filterRules: FilterRule[]): Params { |
| LOW | src-ui/src/app/utils/http.ts | 1 | export function getFilenameFromContentDisposition(header: string): string { |
| LOW | src-ui/src/app/utils/color.ts | 122 | export function estimateBrightnessForColor(colorHex: string) { |
| LOW | src/paperless_ai/matching.py | 27 | def match_correspondents_by_name(names: list[str], user: User) -> list[Correspondent]: |
| LOW | src/paperless_ai/matching.py | 36 | def match_document_types_by_name(names: list[str], user: User) -> list[DocumentType]: |
| LOW | src/paperless_ai/matching.py | 45 | def match_storage_paths_by_name(names: list[str], user: User) -> list[StoragePath]: |
| LOW | src/paperless_ai/chat.py | 25 | def _build_document_reference( |
| LOW | src/paperless_ai/chat.py | 64 | def _format_chat_metadata_trailer(references: list[dict[str, int | str]]) -> str: |
| LOW | src/paperless_ai/chat.py | 71 | def stream_chat_with_documents(query_str: str, documents: list[Document]): |
| LOW | src/paperless_ai/indexing.py | 26 | def queue_llm_index_update_if_needed(*, rebuild: bool, reason: str) -> bool: |
| LOW | src/paperless_ai/indexing.py | 52 | def get_or_create_storage_context(*, rebuild=False): |
| LOW | src/paperless_ai/indexing.py | 148 | def remove_document_docstore_nodes(document: Document, index: "VectorStoreIndex"): |
| LOW | src/paperless_ai/indexing.py | 252 | def llm_index_add_or_update_document(document: Document): |
| LOW | src/paperless_ai/indexing.py | 268 | def llm_index_remove_document(document: Document): |
| LOW | src/paperless_ai/ai_classifier.py | 88 | def get_ai_document_classification( |
| LOW | src/paperless_ai/tests/test_embedding.py | 56 | def test_get_embedding_model_openai(mock_ai_config): |
| LOW | src/paperless_ai/tests/test_embedding.py | 74 | def test_get_embedding_model_openai_blocks_internal_endpoint_when_disallowed( |
| LOW | src/paperless_ai/tests/test_embedding.py | 87 | def test_get_embedding_model_huggingface(mock_ai_config): |
| LOW | src/paperless_ai/tests/test_embedding.py | 103 | def test_get_embedding_model_invalid_backend(mock_ai_config): |
| LOW | src/paperless_ai/tests/test_embedding.py | 113 | def test_get_embedding_dim_infers_and_saves(temp_llm_index_dir, mock_ai_config): |
| LOW | src/paperless_ai/tests/test_embedding.py | 133 | def test_get_embedding_dim_reads_existing_meta(temp_llm_index_dir, mock_ai_config): |
| LOW | src/paperless_ai/tests/test_embedding.py | 146 | def test_get_embedding_dim_raises_on_model_change(temp_llm_index_dir, mock_ai_config): |
| LOW | src/paperless_ai/tests/test_embedding.py | 161 | def test_build_llm_index_text(mock_document): |
| LOW | src/paperless_ai/tests/test_chat.py | 60 | def test_stream_chat_with_one_document_full_content(mock_document) -> None: |
| LOW | src/paperless_ai/tests/test_chat.py | 97 | def test_stream_chat_with_multiple_documents_retrieval(patch_embed_nodes) -> None: |
| LOW | src/paperless_ai/tests/test_chat.py | 167 | def test_stream_chat_no_matching_nodes() -> None: |
| LOW | src/paperless_ai/tests/test_ai_indexing.py | 78 | def test_update_llm_index_removes_meta( |
| LOW | src/paperless_ai/tests/test_ai_indexing.py | 108 | def test_update_llm_index_partial_update( |
| LOW | src/paperless_ai/tests/test_ai_indexing.py | 158 | def test_get_or_create_storage_context_raises_exception( |
| LOW | src/paperless_ai/tests/test_ai_indexing.py | 169 | def test_load_or_build_index_builds_when_nodes_given( |
| LOW | src/paperless_ai/tests/test_ai_indexing.py | 195 | def test_load_or_build_index_raises_exception_when_no_nodes( |
| LOW | src/paperless_ai/tests/test_ai_indexing.py | 214 | def test_load_or_build_index_succeeds_when_nodes_given( |
| LOW | src/paperless_ai/tests/test_ai_indexing.py | 240 | def test_add_or_update_document_updates_existing_entry( |
| LOW | src/paperless_ai/tests/test_ai_indexing.py | 252 | def test_remove_document_deletes_node_from_docstore( |
| LOW | src/paperless_ai/tests/test_ai_indexing.py | 267 | def test_update_llm_index_no_documents( |
| LOW | src/paperless_ai/tests/test_ai_indexing.py | 286 | def test_queue_llm_index_update_if_needed_enqueues_when_idle_or_skips_recent() -> None: |
| LOW | src/paperless_ai/tests/test_ai_indexing.py | 321 | def test_query_similar_documents( |
| LOW | src/paperless_ai/tests/test_ai_indexing.py | 368 | def test_query_similar_documents_triggers_update_when_index_missing( |
| LOW | src/paperless_ai/tests/test_matching.py | 43 | def test_match_correspondents_by_name(self, mock_get_objects) -> None: |
| LOW | src/paperless_ai/tests/test_matching.py | 51 | def test_match_document_types_by_name(self, mock_get_objects) -> None: |
| LOW | src/paperless_ai/tests/test_matching.py | 59 | def test_match_storage_paths_by_name(self, mock_get_objects) -> None: |
| LOW | src/paperless_ai/tests/test_matching.py | 66 | def test_extract_unmatched_names(self) -> None: |
| LOW | src/paperless_ai/tests/test_matching.py | 73 | def test_match_tags_by_name_with_empty_names(self, mock_get_objects) -> None: |
| LOW | src/paperless_ai/tests/test_matching.py | 80 | def test_match_tags_with_fuzzy_matching(self, mock_get_objects) -> None: |
| LOW | src/paperless_ai/tests/test_ai_classifier.py | 76 | def test_get_ai_document_classification_success(mock_run_llm_query, mock_document): |
| LOW | src/paperless_ai/tests/test_ai_classifier.py | 98 | def test_get_ai_document_classification_failure(mock_run_llm_query, mock_document): |
| LOW | src/paperless_ai/tests/test_ai_classifier.py | 115 | def test_use_rag_if_configured( |
| LOW | src/paperless_ai/tests/test_ai_classifier.py | 134 | def test_use_without_rag_if_not_configured( |
| LOW | src/paperless_ai/tests/test_ai_classifier.py | 153 | def test_prompt_with_without_rag(mock_document): |
| LOW | src/paperless_ai/tests/test_ai_classifier.py | 166 | def test_get_context_for_document( |
| LOW | src/paperless_ai/tests/test_ai_classifier.py | 183 | def test_get_context_for_document_no_similar_docs(mock_document): |
| LOW | src/paperless_ai/tests/test_client.py | 65 | def test_get_llm_openai_blocks_internal_endpoint_when_disallowed(mock_ai_config): |
| LOW | src/paperless_ai/tests/test_client.py | 76 | def test_get_llm_unsupported_backend(mock_ai_config): |
| LOW | src/paperless/signals.py | 35 | def handle_social_account_updated(sender, request, sociallogin, **kwargs): |
| LOW | src/paperless/db_cache.py | 8 | def custom_get_query_cache_key(compiler): |
| LOW | src/paperless/db_cache.py | 12 | def custom_get_table_cache_key(db_alias, table): |
| LOW | src/paperless/adapter.py | 68 | def get_reset_password_from_key_url(self, key): |
| LOW | src/paperless/checks.py | 162 | def _email_certificate_validate(): |
| 1521 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | .github/workflows/ci-release.yml | 191 | # --------------------------------------------------------------------------- |
| MEDIUM | .github/workflows/ci-release.yml | 193 | # --------------------------------------------------------------------------- |
| MEDIUM | src/paperless/celery.py | 13 | # --------------------------------------------------------------------------- |
| MEDIUM | src/paperless/celery.py | 19 | # --------------------------------------------------------------------------- |
| MEDIUM | src/paperless/parsers/mail.py | 448 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/mail.py | 450 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/mail.py | 93 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/mail.py | 95 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/mail.py | 135 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/mail.py | 137 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/mail.py | 163 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/mail.py | 165 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/mail.py | 189 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/mail.py | 191 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/mail.py | 284 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/mail.py | 286 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/mail.py | 319 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/mail.py | 321 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/tesseract.py | 97 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/tesseract.py | 99 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/tesseract.py | 109 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/tesseract.py | 111 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/tesseract.py | 136 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/tesseract.py | 138 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/tesseract.py | 143 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/tesseract.py | 145 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/tesseract.py | 78 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/tesseract.py | 80 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/tesseract.py | 156 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/tesseract.py | 158 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/tika.py | 90 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/tika.py | 92 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/tika.py | 137 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/tika.py | 139 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/tika.py | 164 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/tika.py | 166 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/tika.py | 205 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/tika.py | 207 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/tika.py | 280 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/tika.py | 282 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/tika.py | 315 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/tika.py | 317 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/tika.py | 396 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/tika.py | 398 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/remote.py | 92 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/remote.py | 94 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/remote.py | 151 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/remote.py | 153 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/remote.py | 179 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/remote.py | 181 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/remote.py | 204 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/remote.py | 206 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/remote.py | 246 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/remote.py | 248 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/remote.py | 268 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/remote.py | 270 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/remote.py | 357 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/remote.py | 359 | # ------------------------------------------------------------------ |
| MEDIUM | src/paperless/parsers/registry.py | 47 | # --------------------------------------------------------------------------- |
| MEDIUM | src/paperless/parsers/registry.py | 49 | # --------------------------------------------------------------------------- |
| 158 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| CRITICAL | src-ui/src/app/services/document-list-view.service.ts | 271 | if (!this.router.routerState.snapshot.url.includes('/view/')) { |
| CRITICAL | src-ui/src/app/services/document-list-view.service.ts | 333 | replaceUrl: !this.router.routerState.snapshot.url.includes('?'), // in case navigating from params-less /d |
| CRITICAL | src/paperless/validators.py | 4 | from django.core.exceptions import ValidationError |
| CRITICAL | src/paperless_mail/tests/test_mail.py | 1256 | self.mailMocker.bogus_mailbox.folder.list.assert_called_once() |
| CRITICAL | src/paperless_mail/tests/test_mail.py | 1289 | self.mailMocker.bogus_mailbox.folder.list.assert_called_once() |
| CRITICAL | src/documents/models.py | 9 | from django.core.exceptions import ValidationError |
| CRITICAL | src/documents/validators.py | 3 | from django.core.exceptions import ValidationError |
| CRITICAL | src/documents/serialisers.py | 19 | from django.core.exceptions import ValidationError |
| CRITICAL | src/documents/filters.py | 15 | from django.core.exceptions import FieldError |
| CRITICAL | src/documents/views.py | 326 | ) and self.request.user.ui_settings.settings.get("language"): |
| CRITICAL | src/documents/views.py | 327 | lang = self.request.user.ui_settings.settings.get("language") |
| CRITICAL | src/documents/tests/test_bulk_edit.py | 721 | mock_consume_file.return_value.set.return_value.apply_async.assert_called_once() |
| CRITICAL | src/documents/tests/test_api_document_versions.py | 11 | from django.core.exceptions import FieldError |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | docker/rootfs/usr/local/bin/wait-for-redis.py | 44 | except Exception as e: |
| LOW | docs/development.md | 544 | except Exception as e: |
| LOW | src/paperless/utils.py | 151 | except Exception: |
| LOW | src/paperless/utils.py | 160 | except Exception as e: |
| LOW | src/paperless/parsers/mail.py | 494 | except Exception as err: |
| LOW | src/paperless/parsers/mail.py | 528 | except Exception as err: |
| LOW | src/paperless/parsers/mail.py | 601 | except Exception as err: |
| LOW | src/paperless/parsers/mail.py | 729 | except Exception as err: |
| LOW | src/paperless/parsers/mail.py | 827 | except Exception as err: |
| LOW | src/paperless/parsers/tesseract.py | 219 | except Exception as e: |
| LOW | src/paperless/parsers/tesseract.py | 232 | except Exception as e: |
| LOW | src/paperless/parsers/tesseract.py | 363 | except Exception as e: |
| LOW | src/paperless/parsers/tesseract.py | 406 | except Exception as e: |
| LOW | src/paperless/parsers/tesseract.py | 429 | except Exception as e: |
| LOW | src/paperless/parsers/tesseract.py | 547 | except Exception as e: |
| LOW | src/paperless/parsers/tesseract.py | 560 | except Exception as e: |
| LOW | src/paperless/parsers/tesseract.py | 645 | except Exception as e: |
| LOW | src/paperless/parsers/tesseract.py | 648 | except Exception as e: |
| LOW | src/paperless/parsers/tika.py | 262 | except Exception as err: |
| LOW | src/paperless/parsers/tika.py | 388 | except Exception as e: |
| LOW | src/paperless/parsers/tika.py | 449 | except Exception as err: |
| LOW | src/paperless/parsers/remote.py | 427 | except Exception as e: |
| LOW | src/paperless/parsers/registry.py | 239 | except Exception: |
| LOW | src/paperless/parsers/utils.py | 62 | except Exception: |
| LOW | src/paperless/parsers/utils.py | 105 | except Exception: |
| LOW | src/paperless/parsers/utils.py | 168 | except Exception as e: |
| LOW | src/paperless/parsers/utils.py | 208 | except Exception as e: |
| LOW | src/paperless/parsers/utils.py | 240 | except Exception as e: |
| LOW | src/paperless_mail/mail.py | 230 | except Exception as e: |
| LOW | src/paperless_mail/mail.py | 293 | except Exception: |
| LOW | src/paperless_mail/mail.py | 472 | except Exception as e: |
| LOW | src/paperless_mail/mail.py | 596 | except Exception as e: |
| LOW | src/paperless_mail/mail.py | 602 | except Exception as e: |
| LOW | src/paperless_mail/mail.py | 638 | except Exception as e: |
| LOW | src/paperless_mail/mail.py | 662 | except Exception as err: |
| LOW | src/paperless_mail/mail.py | 706 | except Exception as e: |
| LOW | src/documents/classifier.py | 88 | except Exception as e: # pragma: no cover |
| LOW | src/documents/classifier.py | 171 | except Exception as err: |
| LOW | src/documents/tasks.py | 205 | except Exception as e: |
| LOW | src/documents/tasks.py | 392 | except Exception: |
| LOW | src/documents/tasks.py | 426 | except Exception as e: # pragma: no cover |
| LOW | src/documents/tasks.py | 722 | except Exception as exc: |
| LOW | src/documents/tasks.py | 760 | except Exception as exc: |
| LOW | src/documents/validators.py | 43 | except Exception as e: |
| LOW | src/documents/parsers.py | 119 | except Exception as e: # pragma: no cover |
| LOW | src/documents/consumer.py | 331 | except Exception as e: |
| LOW | src/documents/consumer.py | 400 | except Exception as e: |
| LOW | src/documents/consumer.py | 460 | except Exception as e: |
| LOW | src/documents/consumer.py | 562 | except Exception as e: |
| LOW | src/documents/consumer.py | 760 | except Exception as e: |
| LOW | src/documents/consumer.py | 849 | except Exception as e: |
| LOW | src/documents/consumer.py | 950 | except Exception: # pragma: no cover |
| LOW | src/documents/barcodes.py | 356 | except Exception as e: # pragma: no cover |
| LOW | src/documents/barcodes.py | 441 | except Exception as e: |
| LOW | src/documents/serialisers.py | 883 | except Exception: |
| LOW | src/documents/serialisers.py | 899 | except Exception: |
| LOW | src/documents/serialisers.py | 1755 | except Exception as e: |
| LOW | src/documents/bulk_edit.py | 385 | except Exception as e: |
| LOW | src/documents/bulk_edit.py | 497 | except Exception as e: |
| LOW | src/documents/bulk_edit.py | 544 | except Exception as e: |
| 62 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | docker/compose/docker-compose.sqlite.yml | 2 | # This file contains everything paperless needs to run. |
| MEDIUM | docker/compose/docker-compose.mariadb.yml | 2 | # This file contains everything paperless needs to run. |
| MEDIUM | docker/compose/docker-compose.postgres-tika.yml | 2 | # This file contains everything paperless needs to run. |
| MEDIUM | docker/compose/docker-compose.postgres.yml | 2 | # This file contains everything paperless needs to run. |
| MEDIUM | docker/compose/docker-compose.sqlite-tika.yml | 2 | # This file contains everything paperless needs to run. |
| MEDIUM | docker/compose/docker-compose.mariadb-tika.yml | 2 | # This file contains everything paperless needs to run. |
| MEDIUM | docker/compose/docker-compose.portainer.yml | 2 | # This file contains everything paperless needs to run. |
| MEDIUM | …vcontainer/docker-compose.devcontainer.sqlite-tika.yml | 2 | # This file contains everything Paperless NGX needs to run. |
| MEDIUM | …vcontainer/docker-compose.devcontainer.sqlite-tika.yml | 21 | # This file is intended only to be used through VSCOde devcontainers. See README.md |
| MEDIUM | src/paperless/auth.py | 33 | """This class is here to provide authentication to the angular dev server |
| MEDIUM | src/paperless/tests/test_registry.py | 171 | # Create a subclass and delete the specified method to break compliance. |
| MEDIUM | …c/paperless/tests/settings/test_environment_parsers.py | 102 | # Create a dummy file to resolve against |
| MEDIUM | src/documents/consumer.py | 624 | # Create a log entry for the version addition, if enabled |
| MEDIUM | src/documents/barcodes.py | 209 | # Create the split document tasks |
| MEDIUM | src/documents/barcodes.py | 231 | # This file is now two or more files |
| MEDIUM | src/documents/barcodes.py | 354 | # This file is really borked, allow the consumption to continue |
| MEDIUM | src/documents/bulk_edit.py | 793 | # Create a new version from the edited PDF rather than replacing in-place |
| MEDIUM | src/documents/bulk_edit.py | 907 | # Create a new version rather than modifying the root/original in place. |
| MEDIUM | src/documents/bulk_edit.py | 993 | # Create an instance if target doc doesn't have this field or append it to an existing one |
| MEDIUM | src/documents/tests/test_workflows.py | 4661 | # Create a test file to be consumed |
| MEDIUM | src/documents/tests/test_workflows.py | 4669 | # Create a ConsumableDocument |
| MEDIUM | src/documents/tests/test_workflows.py | 4725 | # Create a test file to be consumed |
| MEDIUM | src/documents/tests/test_workflows.py | 4733 | # Create a ConsumableDocument |
| MEDIUM | src/documents/tests/test_api_app_config.py | 706 | # Define a custom namespace "my:hack" and try to use it |
| MEDIUM | src/documents/tests/test_management_importer.py | 382 | # Create the zip file |
| MEDIUM | src/documents/tests/test_file_handling.py | 306 | # Create an identical document and ensure it is trashed under a new name |
| MEDIUM | src/documents/management/commands/document_importer.py | 443 | # Create a temporary directory for extracting a zip file into it, even if supplied source is no zip file to keep |
| MEDIUM | src/documents/templating/filepath.py | 355 | # Create the dummy document object with all fields filled in for validation purposes |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | src/paperless_ai/embedding.py | 9 | |
| LOW | src/paperless_ai/indexing.py | 20 | |
| LOW | src/paperless/logging.py | 1 | |
| LOW | src/paperless/consumers.py | 1 | |
| LOW | src/paperless/__init__.py | 1 | |
| LOW | src/paperless/__init__.py | 2 | |
| LOW | src/paperless/__init__.py | 3 | |
| LOW | src/paperless/__init__.py | 4 | |
| LOW | src/paperless/__init__.py | 5 | |
| LOW | src/paperless/parsers/mail.py | 14 | |
| LOW | src/paperless/parsers/tesseract.py | 1 | |
| LOW | src/paperless/parsers/tika.py | 10 | |
| LOW | src/paperless/parsers/remote.py | 13 | |
| LOW | src/paperless/parsers/registry.py | 33 | |
| LOW | src/paperless/parsers/__init__.py | 36 | |
| LOW | src/paperless/parsers/utils.py | 9 | |
| LOW | src/paperless/parsers/text.py | 9 | |
| LOW | src/paperless/tests/test_registry.py | 10 | |
| LOW | src/paperless/tests/conftest.py | 11 | |
| LOW | src/paperless/tests/test_checks_v3.py | 3 | |
| LOW | src/paperless/tests/test_ocr_config.py | 3 | |
| LOW | src/paperless/tests/test_parser_utils.py | 3 | |
| LOW | src/paperless/tests/parsers/conftest.py | 7 | |
| LOW | src/paperless/tests/parsers/test_remote_parser.py | 16 | |
| LOW | src/paperless/tests/parsers/test_text_parser.py | 8 | |
| LOW | src/paperless/tests/parsers/test_tesseract_parser.py | 9 | |
| LOW | …/paperless/tests/parsers/test_convert_image_to_pdfa.py | 12 | |
| LOW | src/paperless/tests/parsers/test_parse_modes.py | 12 | |
| LOW | src/paperless_mail/tests/factories.py | 1 | |
| LOW | src/documents/mail.py | 1 | |
| LOW | src/documents/classifier.py | 1 | |
| LOW | src/documents/__init__.py | 2 | |
| LOW | src/documents/parsers.py | 1 | |
| LOW | src/documents/apps.py | 35 | |
| LOW | src/documents/bulk_download.py | 1 | |
| LOW | src/documents/caching.py | 1 | |
| LOW | src/documents/consumer.py | 195 | |
| LOW | src/documents/versioning.py | 1 | |
| LOW | src/documents/barcodes.py | 1 | |
| LOW | src/documents/serialisers.py | 1 | |
| LOW | src/documents/bulk_edit.py | 1 | |
| LOW | src/documents/regex.py | 1 | |
| LOW | src/documents/signals/handlers.py | 1 | |
| LOW | src/documents/tests/test_share_link_bundles.py | 1 | |
| LOW | src/documents/tests/test_management_consumer.py | 14 | |
| LOW | src/documents/tests/conftest.py | 19 | |
| LOW | src/documents/tests/test_consumer_archive.py | 3 | |
| LOW | src/documents/tests/test_sanity_check.py | 7 | |
| LOW | src/documents/tests/test_management.py | 1 | |
| LOW | src/documents/tests/factories.py | 5 | |
| LOW | src/documents/tests/test_api_document_versions.py | 1 | |
| LOW | src/documents/tests/test_management_retagger.py | 5 | |
| LOW | …documents/tests/management/test_management_base_cmd.py | 3 | |
| LOW | …nts/tests/management/test_management_sanity_checker.py | 6 | |
| LOW | src/documents/tests/search/conftest.py | 1 | |
| LOW | src/documents/tests/search/test_tokenizer.py | 1 | |
| LOW | src/documents/tests/search/test_schema.py | 1 | |
| LOW | src/documents/tests/search/test_query.py | 1 | |
| LOW | src/documents/management/commands/document_retagger.py | 1 | |
| LOW | src/documents/management/commands/document_exporter.py | 30 | |
| 19 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | docker/rootfs/usr/local/bin/deduplicate.py | 52 | |
| LOW | src/paperless_ai/indexing.py | 171 | |
| LOW | src/paperless/validators.py | 183 | |
| LOW | src/paperless/checks.py | 24 | |
| LOW | src/paperless/utils.py | 118 | |
| LOW | src/paperless/settings/parsers.py | 61 | |
| LOW | src/paperless/parsers/tesseract.py | 266 | |
| LOW | src/paperless/parsers/tika.py | 400 | |
| LOW | src/paperless_mail/mail.py | 361 | |
| LOW | src/paperless_mail/mail.py | 512 | |
| LOW | src/paperless_mail/mail.py | 540 | |
| LOW | src/paperless_mail/views.py | 87 | |
| LOW | src/paperless_mail/tests/test_mail.py | 81 | |
| LOW | src/paperless_mail/tests/test_mail.py | 172 | |
| LOW | src/paperless_mail/tests/test_mail.py | 331 | |
| LOW | src/documents/mail.py | 19 | |
| LOW | src/documents/tasks.py | 124 | |
| LOW | src/documents/tasks.py | 279 | |
| LOW | src/documents/tasks.py | 436 | |
| LOW | src/documents/double_sided.py | 39 | |
| LOW | src/documents/matching.py | 169 | |
| LOW | src/documents/matching.py | 642 | |
| LOW | src/documents/consumer.py | 408 | |
| LOW | src/documents/sanity_checker.py | 219 | |
| LOW | src/documents/permissions.py | 93 | |
| LOW | src/documents/barcodes.py | 397 | |
| LOW | src/documents/serialisers.py | 191 | |
| LOW | src/documents/serialisers.py | 849 | |
| LOW | src/documents/serialisers.py | 1130 | |
| LOW | src/documents/serialisers.py | 1462 | |
| LOW | src/documents/serialisers.py | 1746 | |
| LOW | src/documents/serialisers.py | 1785 | |
| LOW | src/documents/serialisers.py | 2026 | |
| LOW | src/documents/serialisers.py | 2844 | |
| LOW | src/documents/bulk_edit.py | 287 | |
| LOW | src/documents/bulk_edit.py | 433 | |
| LOW | src/documents/bulk_edit.py | 613 | |
| LOW | src/documents/bulk_edit.py | 745 | |
| LOW | src/documents/bulk_edit.py | 875 | |
| LOW | src/documents/bulk_edit.py | 967 | |
| LOW | src/documents/filters.py | 254 | |
| LOW | src/documents/filters.py | 471 | |
| LOW | src/documents/filters.py | 637 | |
| LOW | src/documents/views.py | 1599 | |
| LOW | src/documents/views.py | 2821 | |
| LOW | src/documents/views.py | 4548 | |
| LOW | src/documents/signals/handlers.py | 342 | |
| LOW | src/documents/signals/handlers.py | 434 | |
| LOW | src/documents/signals/handlers.py | 751 | |
| LOW | src/documents/signals/handlers.py | 854 | |
| LOW | src/documents/signals/handlers.py | 1026 | |
| LOW | src/documents/tests/test_management_exporter.py | 195 | |
| LOW | src/documents/tests/test_consumer.py | 143 | |
| LOW | src/documents/tests/test_consumer.py | 1366 | |
| LOW | src/documents/tests/test_consumer.py | 1521 | |
| LOW | src/documents/tests/test_api_bulk_edit.py | 1439 | |
| LOW | src/documents/management/commands/document_retagger.py | 230 | |
| LOW | src/documents/management/commands/document_importer.py | 71 | |
| LOW | src/documents/management/commands/document_importer.py | 215 | |
| LOW | src/documents/management/commands/document_importer.py | 282 | |
| 16 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | src/paperless/parsers/mail.py | 0 | return the mime types this parser handles. returns ------- dict[str, str] mapping of mime type to preferred file extensi |
| HIGH | src/paperless/parsers/tika.py | 0 | return the mime types this parser handles. returns ------- dict[str, str] mapping of mime type to preferred file extensi |
| HIGH | src/paperless/parsers/text.py | 0 | return the mime types this parser handles. returns ------- dict[str, str] mapping of mime type to preferred file extensi |
| HIGH | src/paperless/parsers/mail.py | 0 | return the plain-text content extracted during parse. returns ------- str | none extracted text, or none if parse has no |
| HIGH | src/paperless/parsers/tika.py | 0 | return the plain-text content extracted during parse. returns ------- str | none extracted text, or none if parse has no |
| HIGH | src/paperless/parsers/text.py | 0 | return 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.py | 0 | test that missing environment variables return provided defaults. |
| HIGH | …c/paperless/tests/settings/test_environment_parsers.py | 0 | test that missing environment variables return provided defaults. |
| HIGH | …c/paperless/tests/settings/test_environment_parsers.py | 0 | test that missing environment variables return provided defaults. |
| HIGH | …c/paperless/tests/settings/test_environment_parsers.py | 0 | test that missing environment variable with no default returns none. |
| HIGH | …c/paperless/tests/settings/test_environment_parsers.py | 0 | test that missing environment variable with no default returns none. |
| HIGH | …c/paperless/tests/settings/test_environment_parsers.py | 0 | test that missing environment variable with no default returns none. |
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | src/paperless/settings/parsers.py | 14 | Converts a string representation of truth to a boolean value. Recognizes 'true', '1', 't', 'y', 'yes' as True, |
| HIGH | src/paperless/settings/parsers.py | 67 | Parses a key-value string into a dictionary, applying defaults and casting types. Supports nested keys via dot |
| HIGH | src/paperless/settings/parsers.py | 224 | Get and parse a list from an environment variable or return a default. Args: key: Environment variable |
| HIGH | src/paperless/settings/parsers.py | 266 | Gets and validates an environment variable against a set of allowed choices. Args: env_key: The enviro |
| HIGH | src/documents/utils.py | 148 | Compute the SHA-256 checksum of a file. Reads the file in chunks to avoid loading the entire file into memory. |
| HIGH | src/documents/templating/filters.py | 11 | Format a date, datetime or str object into a localized string using Babel. Args: value (date | datetim |
| HIGH | src/documents/search/_backend.py | 815 | Get a batch context manager for bulk index operations. Use this for efficient bulk document updates/de |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | install-paperless-ngx.sh | 64 | # Check if user has permissions to run Docker by trying to get the status of Docker (docker status). |
| LOW | docker/rootfs/usr/local/bin/deduplicate.py | 19 | # Read file in chunks to handle large files efficiently |
| LOW | src/paperless/validators.py | 234 | # Check if any dangerous pattern is a substring of the style |
| LOW | src/paperless/validators.py | 245 | # Check if value starts with any dangerous scheme |
| LOW | src/paperless/tests/parsers/test_mail_parser.py | 94 | # Check if exception is raised when parsing fails. |
| LOW | src/paperless/tests/parsers/test_mail_parser.py | 115 | # Check if exception is raised when the mail is faulty. |
| LOW | src/paperless/tests/parsers/test_mail_parser.py | 409 | # Check if exception is raised when Tika cannot be reached. |
| LOW | src/documents/classifier.py | 285 | # Check if retraining is actually required. |
| LOW | src/documents/matching.py | 378 | # Check if any tag filters exist to determine if we need to load document tags |
| LOW | src/documents/bulk_edit.py | 979 | # Check if any documents are going to be removed from the current list of links and remove the symmetrical links |
| LOW | src/documents/filters.py | 566 | # Check if 1) custom field name matches, and 2) value satisfies condition |
| LOW | src/documents/filters.py | 608 | # Check if the operator is supported for the current data_type. |
| LOW | src/documents/filters.py | 724 | # Check if any of the requested IDs are missing. |
| LOW | src/documents/signals/handlers.py | 907 | # Check if document was soft deleted (moved to trash) |
| LOW | src/documents/tests/date_parsing/test_date_parsing.py | 85 | # Check if an error was logged |
| LOW | src/documents/tests/date_parsing/test_date_parsing.py | 89 | # Check if the specific error message is present |
| LOW | src/documents/management/commands/manage_superuser.py | 33 | # Check if there's already a user called admin |
| LOW | src/documents/management/commands/manage_superuser.py | 42 | # Check if any superuseruser |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | docs/changelog.md | 7054 | thinking that everything is in Catalan because we had _Lorem ipsum_ |
| LOW | docs/development.md | 414 | author = "Acme Corp" # author / organisation |
| LOW | docs/development.md | 665 | author = "Acme Corp" |
| LOW | …il/document-history/document-history.component.spec.ts | 76 | const correspondentName = 'John Doe' |
| LOW | …il/document-history/document-history.component.spec.ts | 92 | .mockReturnValue(of({ name: 'John Doe' })) |
| LOW | …file-edit-dialog/profile-edit-dialog.component.spec.ts | 33 | email: 'foo@bar.com', |
| LOW | …stions-dropdown/suggestions-dropdown.component.spec.ts | 26 | suggested_correspondents: ['John Doe'], |
| LOW | …s/common/preview-popup/preview-popup.component.spec.ts | 21 | content: 'Cupcake ipsum dolor sit amet ice cream.', |
| LOW | …ument-card-large/document-card-large.component.spec.ts | 37 | '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.ts | 26 | 'Cupcake ipsum dolor sit amet ice cream. Donut shortbread cheesecake caramels tiramisu pastry caramels chocolate bar |
| LOW | src-ui/src/app/services/profile.service.spec.ts | 42 | service.update({ email: 'foo@bar.com' }).subscribe() |
| LOW | src-ui/src/app/services/profile.service.spec.ts | 48 | email: 'foo@bar.com', |
| LOW | src/paperless_ai/tests/test_ai_classifier.py | 80 | "correspondents": ["John Doe"], |
| LOW | src/paperless_ai/tests/test_ai_classifier.py | 90 | assert result["correspondents"] == ["John Doe"] |
| LOW | src/paperless_ai/tests/test_client.py | 96 | "correspondents": ["John Doe"], |
| LOW | src/paperless/parsers/__init__.py | 20 | author = "Acme Corp" |
| LOW | src/paperless/tests/test_adapter.py | 100 | "email": "user@example.com", |
| LOW | src/documents/tests/test_workflows.py | 3363 | to="user@example.com", |
| LOW | src/documents/tests/test_workflows.py | 3650 | to="user@example.com", |
| LOW | src/documents/tests/test_workflows.py | 4395 | to="user@example.com", |
| LOW | src/documents/tests/test_workflows.py | 4529 | to="user@example.com", |
| LOW | src/documents/tests/test_api_search.py | 156 | content="Lorem ipsum dolor sit amet, consectetur adipiscing elit.", |
| LOW | src/documents/tests/test_api_search.py | 156 | content="Lorem ipsum dolor sit amet, consectetur adipiscing elit.", |
| LOW | src/documents/tests/search/test_backend.py | 128 | content="Lorem ipsum dolor sit amet, consectetur adipiscing elit.", |
| LOW | src/documents/tests/search/test_backend.py | 128 | content="Lorem ipsum dolor sit amet, consectetur adipiscing elit.", |
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | src/documents/classifier.py | 305 | # subtract 1 since -1 (null) is also part of the classes. |
| HIGH | …/documents/management/commands/convert_mariadb_uuid.py | 21 | old_field = models.CharField(null=null, max_length=36) |
| HIGH | …/documents/management/commands/convert_mariadb_uuid.py | 24 | new_field = models.UUIDField(null=null) |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | docker/compose/docker-compose.sqlite.yml | 1 | # Docker Compose file for running paperless from the Docker Hub. |
| LOW | docker/compose/docker-compose.mariadb.yml | 1 | # Docker Compose file for running paperless from the Docker Hub. |
| LOW | docker/compose/docker-compose.postgres-tika.yml | 1 | # Docker Compose file for running paperless from the docker container registry. |
| LOW | docker/compose/docker-compose.postgres.yml | 1 | # Docker Compose file for running paperless from the Docker Hub. |
| LOW | docker/compose/docker-compose.sqlite-tika.yml | 1 | # Docker Compose file for running paperless from the docker container registry. |
| LOW | docker/compose/docker-compose.mariadb-tika.yml | 1 | # docker compose file for running paperless from the Docker Hub. |
| LOW | docker/compose/docker-compose.portainer.yml | 1 | # Docker Compose file for running paperless from the Docker Hub. |
| LOW | …vcontainer/docker-compose.devcontainer.sqlite-tika.yml | 1 | # Docker Compose file for developing Paperless NGX in VSCode DevContainers. |
| LOW | .github/workflows/codeql-analysis.yml | 1 | # For most projects, this workflow file will not need changing; you simply need |
| LOW | src-ui/playwright.config.ts | 41 | use: { ...devices['Desktop Chrome'] }, |
| LOW | src-ui/playwright.config.ts | 61 | // use: { ...devices['iPhone 12'] }, |
| LOW | src/paperless/settings/__init__.py | 41 | load_dotenv(path) |
| LOW | src/documents/signals/handlers.py | 461 | msg = f"Document {instance!s}: Cannot rename file since target path {new_path} already exists." |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | src/documents/classifier.py | 246 | # Step 1: Extract and preprocess training data from the database. |
| LOW | src/documents/classifier.py | 324 | # Step 2: vectorize data |
| LOW | src/documents/classifier.py | 350 | # Step 3: train the classifiers |
| LOW | src/documents/templating/utils.py | 13 | # Step 1: Match placeholders with single curly braces but not those with double braces |
| LOW | src/documents/templating/utils.py | 16 | # Step 2: Replace the placeholders with {{ var }} or {{ }} |
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | pyproject.toml | 14 | # TODO: Move certain things to groups and then utilize that further |
| MEDIUM | src/paperless/parsers/tesseract.py | 243 | # the whole text, so do not utilize it in that case |
| LOW | src/documents/views.py | 2615 | # if all is not true, just pass through the provided document ids |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | src/documents/workflows/webhooks.py | 32 | def handle_request(self, request: httpx.Request) -> httpx.Response: |