From 5b7fd9ad889e54d4d694d310b559c921d7df75cf Mon Sep 17 00:00:00 2001 From: Sven-Hendrik Haase Date: Thu, 16 Mar 2017 14:37:58 +0100 Subject: [PATCH 1/3] Print a stacktrace on CLI error (closes #2208) --- flask/cli.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/flask/cli.py b/flask/cli.py index bde5a13b..8f8fac03 100644 --- a/flask/cli.py +++ b/flask/cli.py @@ -11,6 +11,7 @@ import os import sys +import traceback from threading import Lock, Thread from functools import update_wrapper @@ -368,6 +369,9 @@ class FlaskGroup(AppGroup): # want the help page to break if the app does not exist. # If someone attempts to use the command we try to create # the app again and this will give us the error. + # However, we will not do so silently because that would confuse + # users. + traceback.print_exc() pass return sorted(rv) From ad42d88fb2cda12a21c4fb6f002f425f233d1fe3 Mon Sep 17 00:00:00 2001 From: Sven-Hendrik Haase Date: Thu, 16 Mar 2017 14:42:09 +0100 Subject: [PATCH 2/3] Remove useless pass --- flask/cli.py | 1 - 1 file changed, 1 deletion(-) diff --git a/flask/cli.py b/flask/cli.py index 8f8fac03..8db7e07e 100644 --- a/flask/cli.py +++ b/flask/cli.py @@ -372,7 +372,6 @@ class FlaskGroup(AppGroup): # However, we will not do so silently because that would confuse # users. traceback.print_exc() - pass return sorted(rv) def main(self, *args, **kwargs): From ed17bc171046a15f03c890687db8eb9652513bd9 Mon Sep 17 00:00:00 2001 From: Sven-Hendrik Haase Date: Thu, 16 Mar 2017 20:56:12 +0100 Subject: [PATCH 3/3] Add test to showcase that printing a traceback works --- tests/test_cli.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tests/test_cli.py b/tests/test_cli.py index 313a34d2..82c69f93 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -191,3 +191,20 @@ def test_flaskgroup(): result = runner.invoke(cli, ['test']) assert result.exit_code == 0 assert result.output == 'flaskgroup\n' + + +def test_print_exceptions(): + """Print the stacktrace if the CLI.""" + def create_app(info): + raise Exception("oh no") + return Flask("flaskgroup") + + @click.group(cls=FlaskGroup, create_app=create_app) + def cli(**params): + pass + + runner = CliRunner() + result = runner.invoke(cli, ['--help']) + assert result.exit_code == 0 + assert 'Exception: oh no' in result.output + assert 'Traceback' in result.output