From 7393c1f99c9e33871e8b4aaad45f2675e7b410af Mon Sep 17 00:00:00 2001
From: AUTOMATIC <16777216c@gmail.com>
Date: Sat, 3 Jun 2023 13:55:35 +0300
Subject: Added sysinfo tab to settings

---
 modules/errors.py | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

(limited to 'modules/errors.py')

diff --git a/modules/errors.py b/modules/errors.py
index e408f500..5271a9fe 100644
--- a/modules/errors.py
+++ b/modules/errors.py
@@ -3,10 +3,30 @@ import textwrap
 import traceback
 
 
+exception_records = []
+
+
+def record_exception():
+    _, e, tb = sys.exc_info()
+    if e is None:
+        return
+
+    if exception_records and exception_records[-1] == e:
+        return
+
+    exception_records.append((e, tb))
+
+    if len(exception_records) > 5:
+        exception_records.pop(0)
+
+
 def report(message: str, *, exc_info: bool = False) -> None:
     """
     Print an error message to stderr, with optional traceback.
     """
+
+    record_exception()
+
     for line in message.splitlines():
         print("***", line, file=sys.stderr)
     if exc_info:
@@ -15,6 +35,8 @@ def report(message: str, *, exc_info: bool = False) -> None:
 
 
 def print_error_explanation(message):
+    record_exception()
+
     lines = message.strip().split("\n")
     max_len = max([len(x) for x in lines])
 
@@ -25,6 +47,8 @@ def print_error_explanation(message):
 
 
 def display(e: Exception, task, *, full_traceback=False):
+    record_exception()
+
     print(f"{task or 'error'}: {type(e).__name__}", file=sys.stderr)
     te = traceback.TracebackException.from_exception(e)
     if full_traceback:
@@ -44,6 +68,8 @@ already_displayed = {}
 
 
 def display_once(e: Exception, task):
+    record_exception()
+
     if task in already_displayed:
         return
 
-- 
cgit v1.2.3