Abhilash Raj pushed to branch master at GNU Mailman / Mailman Core
Commits:
031fe79d by Abhilash Raj at 2019-04-25T05:06:58Z
Add an error handler in falcon.API for ValueError.
Any unhandled ValueError will be caught by this error handler so that
client's
don't necessarily need to see 500 error because of bad input.
- - - - -
cc07241a by Abhilash Raj at 2019-04-25T05:06:58Z
Merge branch 'fix-uncaught-errors' into 'master'
Add an error handler in falcon.API for ValueError.
See merge request mailman/mailman!459
- - - - -
1 changed file:
- src/mailman/rest/wsgiapp.py
Changes:
=====================================
src/mailman/rest/wsgiapp.py
=====================================
@@ -25,6 +25,7 @@ from falcon import API, HTTPUnauthorized
from falcon.routing import map_http_methods, set_default_responders
from mailman.config import config
from mailman.database.transaction import transactional
+from mailman.rest.helpers import bad_request
from mailman.rest.root import Root
from public import public
from wsgiref.simple_server import (
@@ -105,6 +106,20 @@ class Middleware:
challenges=[realm])
+def handle_ValueError(exc, request, response, params):
+ """Handle ValueErrors in API code to return HTTPBadRequest.
+
+ ValueErrors are raised often by Validator and should not return a 500 error
+ resposne to the client. This is a stop-gap for 500 errors due to
+ ValueErrors, it is recommended that they be handled at the call-site,
+ instead of here.
+ """
+ # Only handle ValueError, raise anything else right back.
+ if not isinstance(exc, ValueError):
+ raise exc
+ bad_request(response, str(exc))
+
+
class ObjectRouter:
def __init__(self, root):
self._root = root
@@ -221,7 +236,9 @@ class RootedAPI(API):
@public
def make_application():
"""Return a callable WSGI application object."""
- return RootedAPI(Root())
+ app = RootedAPI(Root())
+ app.add_error_handler(ValueError, handle_ValueError)
+ return app
@public
View it on GitLab:
https://gitlab.com/mailman/mailman/compare/d2a13a4a4d5890abc69c05a43640c0042759bd0c...cc07241af178bb6870e6043babebf0432659734a
--
View it on GitLab:
https://gitlab.com/mailman/mailman/compare/d2a13a4a4d5890abc69c05a43640c0042759bd0c...cc07241af178bb6870e6043babebf0432659734a
You're receiving this email because of your account on gitlab.com.
_______________________________________________
Mailman-checkins mailing list
[email protected]
Unsubscribe:
https://mail.python.org/mailman/options/mailman-checkins/archive%40jab.org