Making the testing of the debugging middleware a bit more sane by
avoiding monkeypatching.
This commit is contained in:
@@ -218,24 +218,22 @@ debug_template = Template(debug_template_raw)
|
||||
__debug_environ__ = None
|
||||
|
||||
|
||||
def debug_request():
|
||||
pdb.post_mortem() # pragma: no cover
|
||||
|
||||
|
||||
class PdbMiddleware(object):
|
||||
def __init__(self, app):
|
||||
def __init__(self, app, debugger):
|
||||
self.app = app
|
||||
self.debugger = debugger
|
||||
|
||||
def __call__(self, environ, start_response):
|
||||
try:
|
||||
return self.app(environ, start_response)
|
||||
except:
|
||||
debug_request()
|
||||
self.debugger()
|
||||
|
||||
|
||||
class DebugMiddleware(object):
|
||||
def __init__(self, app):
|
||||
def __init__(self, app, debugger=pdb.post_mortem):
|
||||
self.app = app
|
||||
self.debugger = debugger
|
||||
|
||||
def __call__(self, environ, start_response):
|
||||
assert not environ['wsgi.multiprocess'], (
|
||||
@@ -246,7 +244,9 @@ class DebugMiddleware(object):
|
||||
global __debug_environ__
|
||||
debugging = environ['PATH_INFO'] == '/__pecan_initiate_pdb__'
|
||||
if debugging:
|
||||
PdbMiddleware(self.app)(__debug_environ__, start_response)
|
||||
PdbMiddleware(self.app, self.debugger)(
|
||||
__debug_environ__, start_response
|
||||
)
|
||||
environ = __debug_environ__
|
||||
|
||||
try:
|
||||
|
||||
@@ -47,19 +47,22 @@ class TestDebugMiddleware(TestCase):
|
||||
)
|
||||
|
||||
def test_middlware_allows_for_post_mortem_debugging(self):
|
||||
# monkeypatch debug request
|
||||
from pecan.middleware import debug
|
||||
|
||||
def patch_debugger(d):
|
||||
def _patched_debug_request():
|
||||
d.append(True)
|
||||
return _patched_debug_request
|
||||
|
||||
debugger = []
|
||||
debug.debug_request = patch_debugger(debugger)
|
||||
|
||||
r = self.app.get('/error', expect_errors=True)
|
||||
app = TestApp(
|
||||
DebugMiddleware(
|
||||
self.app,
|
||||
patch_debugger(debugger)
|
||||
)
|
||||
)
|
||||
|
||||
r = app.get('/error', expect_errors=True)
|
||||
assert r.status_int == 400
|
||||
|
||||
r = self.app.get('/__pecan_initiate_pdb__', expect_errors=True)
|
||||
r = app.get('/__pecan_initiate_pdb__', expect_errors=True)
|
||||
assert len(debugger) > 0
|
||||
|
||||
Reference in New Issue
Block a user