Browse Source

prevent NoAppException when ImportError occurs within imported module

pull/2247/head
Paul Brown 8 years ago committed by Markus Unterwaditzer
parent
commit
0832e77b14
  1. 14
      flask/cli.py
  2. 7
      tests/test_apps/cliapp/importerrorapp.py
  3. 1
      tests/test_cli.py

14
flask/cli.py

@ -89,10 +89,16 @@ def locate_app(app_id):
try:
__import__(module)
except ImportError:
raise NoAppException('The file/path provided (%s) does not appear to '
'exist. Please verify the path is correct. If '
'app is not on PYTHONPATH, ensure the extension '
'is .py' % module)
# Reraise the ImportError if it occurred within the imported module.
# Determine this by checking whether the trace has a depth > 1.
if sys.exc_info()[-1].tb_next:
raise
else:
raise NoAppException('The file/path provided (%s) does not appear'
' to exist. Please verify the path is '
'correct. If app is not on PYTHONPATH, '
'ensure the extension is .py' % module)
mod = sys.modules[module]
if app_obj is None:
app = find_best_app(mod)

7
tests/test_apps/cliapp/importerrorapp.py

@ -0,0 +1,7 @@
from __future__ import absolute_import, print_function
from flask import Flask
raise ImportError()
testapp = Flask('testapp')

1
tests/test_cli.py

@ -83,6 +83,7 @@ def test_locate_app(test_apps):
pytest.raises(NoAppException, locate_app, "notanpp.py")
pytest.raises(NoAppException, locate_app, "cliapp/app")
pytest.raises(RuntimeError, locate_app, "cliapp.app:notanapp")
pytest.raises(ImportError, locate_app, "cliapp.importerrorapp")
def test_find_default_import_path(test_apps, monkeypatch, tmpdir):

Loading…
Cancel
Save