Trap out of disk errors
authorKarl O. Pinc <kop@karlpinc.com>
Wed, 2 Oct 2024 17:19:50 +0000 (12:19 -0500)
committerKarl O. Pinc <kop@karlpinc.com>
Wed, 2 Oct 2024 17:19:50 +0000 (12:19 -0500)
src/pgwui_sql/exceptions.py
src/pgwui_sql/views/sql.py

index 6e9459b69cd36910454011ac4d4f0363d334cacc..2285af688f810a8ba8ae561be71dbfe588f88697 100644 (file)
@@ -94,3 +94,15 @@ class MemoryError(SQLError):
     def __init__(self, descr='', detail=''):
         super().__init__('Webserver out of memory',
                          '', descr=descr, detail=detail)
+
+
+class OutOfDiskError(SQLError):
+    '''
+    Error raised when we run out of disk
+
+    descr  More description of the error
+    detail Extra HTML describing the error
+    '''
+    def __init__(self, descr='', detail=''):
+        super().__init__('Webserver out of disk or disk quota exceeded',
+                         '', descr=descr, detail=detail)
index 23b38044d6be227063bdd7872e8fc627a49d15fb..648a96e97010d821b6bad6f47f0dbf1cb773b405 100644 (file)
@@ -22,6 +22,7 @@ import attrs
 import codecs
 import csv
 import datetime
+import errno
 import gc
 import logging
 import markupsafe
@@ -355,6 +356,11 @@ class SQLResultsHandler(pgwui_core.core.SessionDBHandler):
                 raise sql_ex.MemoryError(
                     ("Can't collect results for on-screen display"
                      '-- try downloading instead'))
+        except OSError as ex:
+            if ex.errno == errno.ENOSPC or ex.errno == errno.EDQUOT:
+                raise sql_ex.OutOfDiskError()
+            else:
+                raise
 
     def factory(self, ue):
         '''Make a db loader function from an UploadEngine.