forked from orbit-oss/flask
Merge pull request #1679 from miguelgrinberg/passthrough-errors
Werkzeug should not block propagated exceptions from Flask
This commit is contained in:
commit
7b1ebfbc4d
3 changed files with 23 additions and 1 deletions
|
|
@ -833,6 +833,7 @@ class Flask(_PackageBoundObject):
|
|||
self.debug = bool(debug)
|
||||
options.setdefault('use_reloader', self.debug)
|
||||
options.setdefault('use_debugger', self.debug)
|
||||
options.setdefault('passthrough_errors', True)
|
||||
try:
|
||||
run_simple(host, port, self, **options)
|
||||
finally:
|
||||
|
|
|
|||
|
|
@ -422,7 +422,8 @@ def run_command(info, host, port, reload, debugger, eager_loading,
|
|||
print(' * Forcing debug %s' % (info.debug and 'on' or 'off'))
|
||||
|
||||
run_simple(host, port, app, use_reloader=reload,
|
||||
use_debugger=debugger, threaded=with_threads)
|
||||
use_debugger=debugger, threaded=with_threads,
|
||||
passthrough_errors=True)
|
||||
|
||||
|
||||
@click.command('shell', short_help='Runs a shell in the app context.')
|
||||
|
|
|
|||
|
|
@ -1222,6 +1222,26 @@ def test_exception_propagation():
|
|||
t.join()
|
||||
|
||||
|
||||
@pytest.mark.parametrize('debug', [True, False])
|
||||
@pytest.mark.parametrize('use_debugger', [True, False])
|
||||
@pytest.mark.parametrize('use_reloader', [True, False])
|
||||
@pytest.mark.parametrize('propagate_exceptions', [None, True, False])
|
||||
def test_werkzeug_passthrough_errors(monkeypatch, debug, use_debugger,
|
||||
use_reloader, propagate_exceptions):
|
||||
rv = {}
|
||||
|
||||
# Mocks werkzeug.serving.run_simple method
|
||||
def run_simple_mock(*args, **kwargs):
|
||||
rv['passthrough_errors'] = kwargs.get('passthrough_errors')
|
||||
|
||||
app = flask.Flask(__name__)
|
||||
monkeypatch.setattr(werkzeug.serving, 'run_simple', run_simple_mock)
|
||||
app.config['PROPAGATE_EXCEPTIONS'] = propagate_exceptions
|
||||
app.run(debug=debug, use_debugger=use_debugger, use_reloader=use_reloader)
|
||||
# make sure werkzeug always passes errors through
|
||||
assert rv['passthrough_errors']
|
||||
|
||||
|
||||
def test_max_content_length():
|
||||
app = flask.Flask(__name__)
|
||||
app.config['MAX_CONTENT_LENGTH'] = 64
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue