From b8fa923ec97af985dfdb204032b30756c6aa77cb Mon Sep 17 00:00:00 2001 From: Andrew Stiles Date: Wed, 21 Nov 2018 11:30:31 -0600 Subject: [PATCH 1/2] Fix broken exception handling in test_500 --- responder/api.py | 3 +++ tests/test_responder.py | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/responder/api.py b/responder/api.py index 005c153..135c199 100644 --- a/responder/api.py +++ b/responder/api.py @@ -13,6 +13,7 @@ import yaml from apispec import APISpec, yaml_utils from apispec.ext.marshmallow import MarshmallowPlugin from asgiref.wsgi import WsgiToAsgi +from starlette.exceptions import ExceptionMiddleware from starlette.middleware.errors import ServerErrorMiddleware from starlette.lifespan import LifespanHandler from starlette.middleware.cors import CORSMiddleware @@ -128,6 +129,8 @@ class API: self.default_endpoint = None self.app = self.dispatch + self.exception_middleware = ExceptionMiddleware(self.dispatch, debug=debug) + self.app = self.exception_middleware self.add_middleware(GZipMiddleware) if self.hsts_enabled: diff --git a/tests/test_responder.py b/tests/test_responder.py index 393ff1c..54bbf72 100644 --- a/tests/test_responder.py +++ b/tests/test_responder.py @@ -478,7 +478,7 @@ def test_500(api): def catcher(request, exc): return PlainTextResponse("Suppressed error", 500) - api.app.add_exception_handler(ValueError, catcher) + api.exception_middleware.add_exception_handler(ValueError, catcher) @api.route("/") def view(req, resp): From 122023fb70ef9c21e63492d8a6ee975f5e8f8b92 Mon Sep 17 00:00:00 2001 From: Andrew Stiles Date: Wed, 21 Nov 2018 13:05:51 -0600 Subject: [PATCH 2/2] Restore the removal of ExceptionMiddleware Back out the changes made to API and fix the test with a non-raising instance of TestClient. --- responder/api.py | 3 --- tests/test_responder.py | 11 ++++------- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/responder/api.py b/responder/api.py index 135c199..005c153 100644 --- a/responder/api.py +++ b/responder/api.py @@ -13,7 +13,6 @@ import yaml from apispec import APISpec, yaml_utils from apispec.ext.marshmallow import MarshmallowPlugin from asgiref.wsgi import WsgiToAsgi -from starlette.exceptions import ExceptionMiddleware from starlette.middleware.errors import ServerErrorMiddleware from starlette.lifespan import LifespanHandler from starlette.middleware.cors import CORSMiddleware @@ -129,8 +128,6 @@ class API: self.default_endpoint = None self.app = self.dispatch - self.exception_middleware = ExceptionMiddleware(self.dispatch, debug=debug) - self.app = self.exception_middleware self.add_middleware(GZipMiddleware) if self.hsts_enabled: diff --git a/tests/test_responder.py b/tests/test_responder.py index 54bbf72..a498c36 100644 --- a/tests/test_responder.py +++ b/tests/test_responder.py @@ -475,18 +475,15 @@ def test_file_uploads(api): def test_500(api): - def catcher(request, exc): - return PlainTextResponse("Suppressed error", 500) - - api.exception_middleware.add_exception_handler(ValueError, catcher) - @api.route("/") def view(req, resp): raise ValueError - r = api.requests.get(api.url_for(view)) + dumb_client = responder.api.TestClient(api, base_url="http://;", + raise_server_exceptions=False) + r = dumb_client.get(api.url_for(view)) assert not r.ok - assert r.content == b"Suppressed error" + assert r.status_code == responder.status_codes.HTTP_500 def test_404(api):