]> git.ipfire.org Git - thirdparty/paperless-ngx.git/commitdiff
When raising an exception during exception handling, chain them together for slightly... 1354/head
authorTrenton Holmes <holmes.trenton@gmail.com>
Wed, 3 Aug 2022 16:00:56 +0000 (09:00 -0700)
committerTrenton Holmes <holmes.trenton@gmail.com>
Wed, 3 Aug 2022 16:00:56 +0000 (09:00 -0700)
src/documents/classifier.py
src/documents/consumer.py
src/paperless_mail/mail.py
src/paperless_tesseract/parsers.py
src/paperless_tika/parsers.py

index 594973ac67561bd1030fe72473adcda79f820958..927151b1d9dfeb2743a33f5707bdc2407248a688 100644 (file)
@@ -101,8 +101,8 @@ class DocumentClassifier:
                         self.correspondent_classifier = pickle.load(f)
                         self.document_type_classifier = pickle.load(f)
                         self.storage_path_classifier = pickle.load(f)
-                    except Exception:
-                        raise ClassifierModelCorruptError()
+                    except Exception as err:
+                        raise ClassifierModelCorruptError() from err
 
             # Check for the warning about unpickling from differing versions
             # and consider it incompatible
index fdf7b2f6e12cb23c7e630401767fe4a1e0ec55bb..69a9efb48193fe927a6e52e8472ddf243e3e4981 100644 (file)
@@ -78,10 +78,16 @@ class Consumer(LoggingMixin):
             {"type": "status_update", "data": payload},
         )
 
-    def _fail(self, message, log_message=None, exc_info=None):
+    def _fail(
+        self,
+        message,
+        log_message=None,
+        exc_info=None,
+        exception: Optional[Exception] = None,
+    ):
         self._send_progress(100, 100, "FAILED", message)
         self.log("error", log_message or message, exc_info=exc_info)
-        raise ConsumerError(f"{self.filename}: {log_message or message}")
+        raise ConsumerError(f"{self.filename}: {log_message or message}") from exception
 
     def __init__(self):
         super().__init__()
@@ -152,6 +158,7 @@ class Consumer(LoggingMixin):
                 MESSAGE_PRE_CONSUME_SCRIPT_ERROR,
                 f"Error while executing pre-consume script: {e}",
                 exc_info=True,
+                exception=e,
             )
 
     def run_post_consume_script(self, document):
@@ -217,6 +224,7 @@ class Consumer(LoggingMixin):
                 MESSAGE_POST_CONSUME_SCRIPT_ERROR,
                 f"Error while executing post-consume script: {e}",
                 exc_info=True,
+                exception=e,
             )
 
     def try_consume_file(
@@ -331,6 +339,7 @@ class Consumer(LoggingMixin):
                 str(e),
                 f"Error while consuming document {self.filename}: {e}",
                 exc_info=True,
+                exception=e,
             )
 
         # Prepare the document classifier.
@@ -415,6 +424,7 @@ class Consumer(LoggingMixin):
                 f"The following error occurred while consuming "
                 f"{self.filename}: {e}",
                 exc_info=True,
+                exception=e,
             )
         finally:
             document_parser.cleanup()
index fefcbda5eec4eb2591b828fedc62d86388110505..e1357d95896060d26612317a4f65d4f0b9798d21 100644 (file)
@@ -197,12 +197,14 @@ class MailAccountHandler(LoggingMixin):
 
                         # Need to transition out of AUTH state to SELECTED
                         M.folder.set("INBOX")
-                    except Exception:
+                    except Exception as err:
                         self.log(
                             "error",
                             "Unable to authenticate with mail server using AUTH=PLAIN",
                         )
-                        raise MailError(f"Error while authenticating account {account}")
+                        raise MailError(
+                            f"Error while authenticating account {account}",
+                        ) from err
                 except Exception as e:
                     self.log(
                         "error",
@@ -245,7 +247,7 @@ class MailAccountHandler(LoggingMixin):
 
         try:
             M.folder.set(rule.folder)
-        except MailboxFolderSelectError:
+        except MailboxFolderSelectError as err:
 
             self.log(
                 "error",
@@ -264,7 +266,7 @@ class MailAccountHandler(LoggingMixin):
             raise MailError(
                 f"Rule {rule}: Folder {rule.folder} "
                 f"does not exist in account {rule.account}",
-            )
+            ) from err
 
         criterias = make_criterias(rule)
 
@@ -279,8 +281,10 @@ class MailAccountHandler(LoggingMixin):
                 mark_seen=False,
                 charset=rule.account.character_set,
             )
-        except Exception:
-            raise MailError(f"Rule {rule}: Error while fetching folder {rule.folder}")
+        except Exception as err:
+            raise MailError(
+                f"Rule {rule}: Error while fetching folder {rule.folder}",
+            ) from err
 
         post_consume_messages = []
 
@@ -320,7 +324,7 @@ class MailAccountHandler(LoggingMixin):
         except Exception as e:
             raise MailError(
                 f"Rule {rule}: Error while processing post-consume actions: " f"{e}",
-            )
+            ) from e
 
         return total_processed_files
 
index f35d3a6b4e526ac2416ea31f0da1533188667499..1cb79959aa3fc741779f220a9bb536c2ea941814 100644 (file)
@@ -323,11 +323,11 @@ class RasterisedDocumentParser(DocumentParser):
 
             except Exception as e:
                 # If this fails, we have a serious issue at hand.
-                raise ParseError(f"{e.__class__.__name__}: {str(e)}")
+                raise ParseError(f"{e.__class__.__name__}: {str(e)}") from e
 
         except Exception as e:
             # Anything else is probably serious.
-            raise ParseError(f"{e.__class__.__name__}: {str(e)}")
+            raise ParseError(f"{e.__class__.__name__}: {str(e)}") from e
 
         # As a last resort, if we still don't have any text for any reason,
         # try to extract the text from the original document.
index 22218dfe70a0207181f510a9e9244f16ff9c5865..0cd0caeab8865e7de899e5d9c4ac20b8aa5c3806 100644 (file)
@@ -57,7 +57,7 @@ class TikaDocumentParser(DocumentParser):
             raise ParseError(
                 f"Could not parse {document_path} with tika server at "
                 f"{tika_server}: {err}",
-            )
+            ) from err
 
         self.text = parsed["content"].strip()
 
@@ -90,7 +90,9 @@ class TikaDocumentParser(DocumentParser):
                 response = requests.post(url, files=files, headers=headers)
                 response.raise_for_status()  # ensure we notice bad responses
             except Exception as err:
-                raise ParseError(f"Error while converting document to PDF: {err}")
+                raise ParseError(
+                    f"Error while converting document to PDF: {err}",
+                ) from err
 
         with open(pdf_path, "wb") as file:
             file.write(response.content)