diff --git a/src-ui/src/app/components/manage/tasks/tasks.component.html b/src-ui/src/app/components/manage/tasks/tasks.component.html
index f6a8b75c8..5a29db110 100644
--- a/src-ui/src/app/components/manage/tasks/tasks.component.html
+++ b/src-ui/src/app/components/manage/tasks/tasks.component.html
@@ -53,7 +53,7 @@
-
{{ task.task_file_name }} |
+ {{ task.task_file_name }} |
{{ task.date_created | customDate:'short' }} |
50" class="result" (click)="expandTask(task); $event.stopPropagation();"
diff --git a/src-ui/src/app/components/manage/tasks/tasks.component.scss b/src-ui/src/app/components/manage/tasks/tasks.component.scss
index 3ca72d9cc..60f8f2297 100644
--- a/src-ui/src/app/components/manage/tasks/tasks.component.scss
+++ b/src-ui/src/app/components/manage/tasks/tasks.component.scss
@@ -20,3 +20,9 @@ pre {
width: 0.8rem;
height: 0.8rem;
}
+
+@media (max-width: 575.98px) {
+ .name-col {
+ max-width: 150px;
+ }
+}
diff --git a/src-ui/src/environments/environment.prod.ts b/src-ui/src/environments/environment.prod.ts
index 877fcc417..cab27cb1f 100644
--- a/src-ui/src/environments/environment.prod.ts
+++ b/src-ui/src/environments/environment.prod.ts
@@ -5,7 +5,7 @@ export const environment = {
apiBaseUrl: document.baseURI + 'api/',
apiVersion: '3',
appTitle: 'Paperless-ngx',
- version: '1.17.3',
+ version: '1.17.3-dev',
webSocketHost: window.location.host,
webSocketProtocol: window.location.protocol == 'https:' ? 'wss:' : 'ws:',
webSocketBaseUrl: base_url.pathname + 'ws/',
diff --git a/src-ui/src/locale/messages.el_GR.xlf b/src-ui/src/locale/messages.el_GR.xlf
index 7ce9b5ff7..fd8fea8a7 100644
--- a/src-ui/src/locale/messages.el_GR.xlf
+++ b/src-ui/src/locale/messages.el_GR.xlf
@@ -4962,7 +4962,7 @@
src/app/components/manage/settings/settings.component.ts
278
- Error retrieving groups
+ Σφάλμα κατά την ανάκτηση ομάδων
Error retrieving users
@@ -4970,7 +4970,7 @@
src/app/components/manage/settings/settings.component.ts
287
- Error retrieving users
+ Σφάλμα στην ανάκτηση χρηστών
Error retrieving mail rules
@@ -4978,7 +4978,7 @@
src/app/components/manage/settings/settings.component.ts
314
- Error retrieving mail rules
+ Σφάλμα κατά την ανάκτηση κανόνων αλληλογραφίας
Error retrieving mail accounts
@@ -4986,7 +4986,7 @@
src/app/components/manage/settings/settings.component.ts
323
- Error retrieving mail accounts
+ Σφάλμα στην ανάκτηση λογαριασμών αλληλογραφίας
Saved view "" deleted.
diff --git a/src/documents/consumer.py b/src/documents/consumer.py
index 0ec6090c2..08d073a4b 100644
--- a/src/documents/consumer.py
+++ b/src/documents/consumer.py
@@ -450,11 +450,18 @@ class Consumer(LoggingMixin):
archive_path = document_parser.get_archive_path()
except ParseError as e:
+ self._fail(
+ str(e),
+ f"Error occurred while consuming document {self.filename}: {e}",
+ exc_info=True,
+ exception=e,
+ )
+ except Exception as e:
document_parser.cleanup()
tempdir.cleanup()
self._fail(
str(e),
- f"Error while consuming document {self.filename}: {e}",
+ f"Unexpected error while consuming document {self.filename}: {e}",
exc_info=True,
exception=e,
)
@@ -544,8 +551,8 @@ class Consumer(LoggingMixin):
except Exception as e:
self._fail(
str(e),
- f"The following error occurred while consuming "
- f"{self.filename}: {e}",
+ f"The following error occurred while storing document "
+ f"{self.filename} after parsing: {e}",
exc_info=True,
exception=e,
)
diff --git a/src/documents/tests/test_consumer.py b/src/documents/tests/test_consumer.py
index a8f427c37..f0e5421cf 100644
--- a/src/documents/tests/test_consumer.py
+++ b/src/documents/tests/test_consumer.py
@@ -211,6 +211,18 @@ class FaultyParser(DocumentParser):
raise ParseError("Does not compute.")
+class FaultyGenericExceptionParser(DocumentParser):
+ def __init__(self, logging_group, scratch_dir):
+ super().__init__(logging_group)
+ _, self.fake_thumb = tempfile.mkstemp(suffix=".webp", dir=scratch_dir)
+
+ def get_thumbnail(self, document_path, mime_type, file_name=None):
+ return self.fake_thumb
+
+ def parse(self, document_path, mime_type, file_name=None):
+ raise Exception("Generic exception.")
+
+
def fake_magic_from_file(file, mime=False):
if mime:
if os.path.splitext(file)[1] == ".pdf":
@@ -260,6 +272,13 @@ class TestConsumer(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
def make_faulty_parser(self, logging_group, progress_callback=None):
return FaultyParser(logging_group, self.dirs.scratch_dir)
+ def make_faulty_generic_exception_parser(
+ self,
+ logging_group,
+ progress_callback=None,
+ ):
+ return FaultyGenericExceptionParser(logging_group, self.dirs.scratch_dir)
+
def setUp(self):
super().setUp()
@@ -496,7 +515,29 @@ class TestConsumer(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
self.assertRaisesMessage(
ConsumerError,
- "sample.pdf: Error while consuming document sample.pdf: Does not compute.",
+ "sample.pdf: Error occurred while consuming document sample.pdf: Does not compute.",
+ self.consumer.try_consume_file,
+ self.get_test_file(),
+ )
+
+ self._assert_first_last_send_progress(last_status="FAILED")
+
+ @mock.patch("documents.parsers.document_consumer_declaration.send")
+ def testGenericParserException(self, m):
+ m.return_value = [
+ (
+ None,
+ {
+ "parser": self.make_faulty_generic_exception_parser,
+ "mime_types": {"application/pdf": ".pdf"},
+ "weight": 0,
+ },
+ ),
+ ]
+
+ self.assertRaisesMessage(
+ ConsumerError,
+ "sample.pdf: Unexpected error while consuming document sample.pdf: Generic exception.",
self.consumer.try_consume_file,
self.get_test_file(),
)
@@ -510,7 +551,7 @@ class TestConsumer(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
self.assertRaisesMessage(
ConsumerError,
- "sample.pdf: The following error occurred while consuming sample.pdf: NO.",
+ "sample.pdf: The following error occurred while storing document sample.pdf after parsing: NO.",
self.consumer.try_consume_file,
filename,
)
diff --git a/src/paperless_tesseract/parsers.py b/src/paperless_tesseract/parsers.py
index 4dbebb589..6764d5031 100644
--- a/src/paperless_tesseract/parsers.py
+++ b/src/paperless_tesseract/parsers.py
@@ -340,7 +340,10 @@ class RasterisedDocumentParser(DocumentParser):
"Ghostscript PDF/A rendering failed, consider setting "
"PAPERLESS_OCR_USER_ARGS: '{\"continue_on_soft_render_error\": true}'", # noqa: E501
)
- raise e
+
+ raise ParseError(
+ f"SubprocessOutputError: {e!s}. See logs for more information.",
+ ) from e
except (NoTextFoundException, InputFileError) as e:
self.log.warning(
f"Encountered an error while running OCR: {e!s}. "
diff --git a/src/paperless_tesseract/tests/test_parser.py b/src/paperless_tesseract/tests/test_parser.py
index 8b3de5615..606453904 100644
--- a/src/paperless_tesseract/tests/test_parser.py
+++ b/src/paperless_tesseract/tests/test_parser.py
@@ -8,6 +8,7 @@ from unittest import mock
from django.test import TestCase
from django.test import override_settings
+from ocrmypdf import SubprocessOutputError
from documents.parsers import ParseError
from documents.parsers import run_convert
@@ -827,6 +828,18 @@ class TestParser(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
# Copied from the PDF to here. Don't even look at it
self.assertIn("ةﯾﻠﺧﺎدﻻ ةرازو", parser.get_text())
+ @mock.patch("ocrmypdf.ocr")
+ def test_gs_rendering_error(self, m):
+ m.side_effect = SubprocessOutputError("Ghostscript PDF/A rendering failed")
+ parser = RasterisedDocumentParser(None)
+
+ self.assertRaises(
+ ParseError,
+ parser.parse,
+ os.path.join(self.SAMPLE_FILES, "simple-digital.pdf"),
+ "application/pdf",
+ )
+
class TestParserFileTypes(DirectoriesMixin, FileSystemAssertsMixin, TestCase):
SAMPLE_FILES = os.path.join(os.path.dirname(__file__), "samples")
|