Refactor to abstract formatting of error detail
authorKarl O. Pinc <kop@karlpinc.com>
Mon, 19 Aug 2024 16:35:49 +0000 (11:35 -0500)
committerKarl O. Pinc <kop@karlpinc.com>
Mon, 19 Aug 2024 16:35:49 +0000 (11:35 -0500)
src/pgwui_sql/views/sql.py

index 7307050f926e244f72b97db6265718a87c502ad6..59884ba0a4f0b2ed8ee0f36bbe6da4d70bf78373 100644 (file)
@@ -150,31 +150,33 @@ class SQLHandler(pgwui_core.core.SessionDBHandler):
 
         return response
 
+    def format_detail(self, err, stmt_text):
+        detail = []
+        if err.diag.message_detail is not None:
+            detail.append(markupsafe.escape(err.diag.message_detail))
+        if err.diag.message_hint is not None:
+            detail.append(
+                f'Hint: {markupsafe.escape(err.diag.message_hint)}')
+        detail = '<br>\n'.join(detail)
+
+        numbered_stmts = []
+        numbered_stmts.append('<br><ol>')
+        for line in stmt_text.rstrip().split('\n'):
+            numbered_stmts.append(f'<li>{markupsafe.escape(line)}</li>')
+        numbered_stmts.append('</ol>')
+
+        return detail + '\n'.join(numbered_stmts)
+
     def execute(self, cur, stmt_text):
         try:
             cur.execute(stmt_text)
         except psycopg.errors.Error as err:
             lineno = stmt_text.count(
                 '\n', 0, int(err.diag.statement_position) - 1) + 1
-
-            detail = []
-            if err.diag.message_detail is not None:
-                detail.append(markupsafe.escape(err.diag.message_detail))
-            if err.diag.message_hint is not None:
-                detail.append(
-                    f'Hint: {markupsafe.escape(err.diag.message_hint)}')
-            detail = '<br>\n'.join(detail)
-
-            numbered_stmts = []
-            numbered_stmts.append('<br><ol>')
-            for line in stmt_text.rstrip().split('\n'):
-                numbered_stmts.append(f'<li>{markupsafe.escape(line)}</li>')
-            numbered_stmts.append('</ol>')
-
             raise sql_ex.SQLError(err.diag.severity,
                                   lineno,
                                   descr=err.diag.message_primary,
-                                  detail=detail + '\n'.join(numbered_stmts))
+                                  detail=self.format_detail(err, stmt_text))
 
     def get_result_rows(self, cur, sql_results):
         first = True