util:wsgi: handle all dispatch() exceptions in BEExceptionApp
authorW. Trevor King <wking@tremily.us>
Mon, 29 Oct 2012 00:20:27 +0000 (20:20 -0400)
committerW. Trevor King <wking@tremily.us>
Mon, 29 Oct 2012 00:24:22 +0000 (20:24 -0400)
This brings BEExceptionApp into closer agreement with
libbe.ui.command_line.dispatch(), and avoids having the server go down
when a user submits a silly command.

libbe/util/wsgi.py

index cd4fbedf145a1d82c43ac7e6466a1cbab5941697..8f407e45031a72c2dcbde052c61d0c35e564919f 100644 (file)
@@ -58,14 +58,13 @@ try:
 except ImportError:
     OpenSSL = None
 
-
-import libbe.util.encoding
-import libbe.util.http
-import libbe.util.id
 import libbe.command
 import libbe.command.base
 import libbe.command.util
 import libbe.storage
+import libbe.util.encoding
+import libbe.util.http
+import libbe.util.id
 
 
 if libbe.TESTING == True:
@@ -316,12 +315,19 @@ class BEExceptionApp (WSGI_Middleware):
             raise libbe.util.wsgi.HandlerError(403, 'Read permission denied')
         except libbe.storage.NotWriteable as e:
             raise libbe.util.wsgi.HandlerError(403, 'Write permission denied')
-        except libbe.storage.InvalidID as e:
-            raise libbe.util.wsgi.HandlerError(
-                libbe.util.http.HTTP_USER_ERROR, 'InvalidID {}'.format(e))
-        except libbe.util.id.NoIDMatches as e:
+        except (libbe.command.UsageError,
+                libbe.command.UserError,
+                OSError,
+                libbe.storage.ConnectionError,
+                libbe.util.http.HTTPError,
+                libbe.util.id.MultipleIDMatches,
+                libbe.util.id.NoIDMatches,
+                libbe.util.id.InvalidIDStructure,
+                libbe.storage.InvalidID,
+                ) as e:
+            msg = '{} {}'.format(type(e).__name__, format(e))
             raise libbe.util.wsgi.HandlerError(
-                libbe.util.http.HTTP_USER_ERROR, 'NoIDMatches {}'.format(e))
+                libbe.util.http.HTTP_USER_ERROR, msg)
 
 
 class UppercaseHeaderApp (WSGI_Middleware):