Import app from wsgi.py or app.py if FLASK_APP is not defined

Fixes #2376
This commit is contained in:
Miguel Grinberg 2017-06-15 11:27:50 -07:00
parent d625d41104
commit 7c40aa9e50
No known key found for this signature in database
GPG key ID: 36848B262DF5F06C
4 changed files with 48 additions and 10 deletions

View file

@ -172,11 +172,12 @@ def prepare_exec_for_file(filename):
if not os.path.isfile(os.path.join(dirpath, '__init__.py')):
break
sys.path.insert(0, dirpath)
if sys.path[0] != dirpath:
sys.path.insert(0, dirpath)
return '.'.join(module[::-1])
def locate_app(script_info, app_id):
def locate_app(script_info, app_id, raise_if_not_found=True):
"""Attempts to locate the application."""
__traceback_hide__ = True
if ':' in app_id:
@ -193,12 +194,14 @@ def locate_app(script_info, app_id):
if sys.exc_info()[-1].tb_next:
stack_trace = traceback.format_exc()
raise NoAppException('There was an error trying to import'
' the app (%s):\n%s' % (module, stack_trace))
else:
' the app (%s):\n%s' % (module, stack_trace))
elif raise_if_not_found:
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)
else:
return
mod = sys.modules[module]
if app_obj is None:
@ -326,15 +329,23 @@ class ScriptInfo(object):
if self.create_app is not None:
rv = call_factory(self.create_app, self)
else:
if not self.app_import_path:
if self.app_import_path:
rv = locate_app(self, self.app_import_path)
else:
for module in ['wsgi.py', 'app.py']:
import_path = prepare_exec_for_file(module)
rv = locate_app(self, import_path,
raise_if_not_found=False)
if rv:
break
if not rv:
raise NoAppException(
'Could not locate Flask application. You did not provide '
'the FLASK_APP environment variable.\n\nFor more '
'information see '
'the FLASK_APP environment variable, and a wsgi.py or '
'app.py module was not found in the current directory.\n\n'
'For more information see '
'http://flask.pocoo.org/docs/latest/quickstart/')
rv = locate_app(self, self.app_import_path)
debug = get_debug_flag()
if debug is not None: