Making the testing of the debugging middleware a bit more sane by

avoiding monkeypatching.
This commit is contained in:
Jonathan LaCour
2012-03-20 11:38:15 -07:00
parent ac356ee09a
commit ddf26197d1
2 changed files with 17 additions and 14 deletions

View File

@@ -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:

View File

@@ -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