@@ -16,8 +16,6 @@ limitations under the License.
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import traceback
|
|
||||||
|
|
||||||
from .request import Request
|
from .request import Request
|
||||||
from .response import Response
|
from .response import Response
|
||||||
from . import responders
|
from . import responders
|
||||||
@@ -69,25 +67,6 @@ class API(object):
|
|||||||
if req.client_accepts_json():
|
if req.client_accepts_json():
|
||||||
resp.body = ex.json()
|
resp.body = ex.json()
|
||||||
|
|
||||||
except Exception as ex:
|
|
||||||
# Reset to a known state and respond with a generic error
|
|
||||||
req = Request(env)
|
|
||||||
resp = Response()
|
|
||||||
|
|
||||||
message = ['Responder raised ', ex.__class__.__name__]
|
|
||||||
|
|
||||||
details = str(ex)
|
|
||||||
if details:
|
|
||||||
message.append(': ')
|
|
||||||
message.append(details)
|
|
||||||
|
|
||||||
stack = traceback.format_exc()
|
|
||||||
message.append('\n')
|
|
||||||
message.append(stack)
|
|
||||||
|
|
||||||
req.log_error(''.join(message))
|
|
||||||
responders.server_error(req, resp)
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Set status and headers
|
# Set status and headers
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -10,15 +10,6 @@ else:
|
|||||||
str_message = 'UTF-8: \xc2\x80'
|
str_message = 'UTF-8: \xc2\x80'
|
||||||
|
|
||||||
|
|
||||||
class BombResource:
|
|
||||||
|
|
||||||
def on_get(self, req, resp):
|
|
||||||
raise IOError()
|
|
||||||
|
|
||||||
def on_head(self, req, resp):
|
|
||||||
raise MemoryError("I can't remember a thing.")
|
|
||||||
|
|
||||||
|
|
||||||
class LoggerResource:
|
class LoggerResource:
|
||||||
|
|
||||||
def on_get(self, req, resp):
|
def on_get(self, req, resp):
|
||||||
@@ -31,10 +22,8 @@ class LoggerResource:
|
|||||||
class TestWSGIError(helpers.TestSuite):
|
class TestWSGIError(helpers.TestSuite):
|
||||||
|
|
||||||
def prepare(self):
|
def prepare(self):
|
||||||
self.tehbomb = BombResource()
|
|
||||||
self.tehlogger = LoggerResource()
|
self.tehlogger = LoggerResource()
|
||||||
|
|
||||||
self.api.add_route('/bomb', self.tehbomb)
|
|
||||||
self.api.add_route('/logger', self.tehlogger)
|
self.api.add_route('/logger', self.tehlogger)
|
||||||
|
|
||||||
self.wsgierrors_buffer = io.BytesIO()
|
self.wsgierrors_buffer = io.BytesIO()
|
||||||
@@ -48,21 +37,6 @@ class TestWSGIError(helpers.TestSuite):
|
|||||||
# with undefined encoding, so do the encoding manually.
|
# with undefined encoding, so do the encoding manually.
|
||||||
self.wsgierrors = self.wsgierrors_buffer
|
self.wsgierrors = self.wsgierrors_buffer
|
||||||
|
|
||||||
def test_exception_logged(self):
|
|
||||||
self._simulate_request('/bomb', wsgierrors=self.wsgierrors)
|
|
||||||
|
|
||||||
log = self.wsgierrors_buffer.getvalue()
|
|
||||||
self.assertIn(b'IOError', log)
|
|
||||||
|
|
||||||
def test_exception_logged_with_details(self):
|
|
||||||
self._simulate_request('/bomb', wsgierrors=self.wsgierrors,
|
|
||||||
method='HEAD')
|
|
||||||
|
|
||||||
log = self.wsgierrors_buffer.getvalue()
|
|
||||||
|
|
||||||
self.assertIn(b'MemoryError', log)
|
|
||||||
self.assertIn(b'remember a thing', log)
|
|
||||||
|
|
||||||
def test_responder_logged_unicode(self):
|
def test_responder_logged_unicode(self):
|
||||||
self._simulate_request('/logger', wsgierrors=self.wsgierrors)
|
self._simulate_request('/logger', wsgierrors=self.wsgierrors)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user