Browse Source

Factor out call_factory_from_regex function

pull/2326/head
Hendrik Makait 7 years ago
parent
commit
7a1a594b26
  1. 41
      flask/cli.py

41
flask/cli.py

@ -96,6 +96,29 @@ def call_factory(func, script_info):
return func()
def call_factory_from_regex(match, mod, script_info):
"""Checks if the given regex match has specified arguments and if the
function takes a ``script_info`` argument and calls the function with
the appropriate arguments."""
function_name = match.group(1)
arguments = match.group(2)
if arguments:
arguments = ast.literal_eval(
"({arguments}, )".format(arguments=arguments))
else:
arguments = ()
app_factory = getattr(mod, function_name, None)
app_factory_arg_names = getargspec(app_factory).args
if 'script_info' in app_factory_arg_names:
app = app_factory(*arguments, script_info=script_info)
elif arguments:
app = app_factory(*arguments)
elif not arguments and len(app_factory_arg_names) == 1:
app = app_factory(script_info)
else:
app = app_factory()
return app
def prepare_exec_for_file(filename):
"""Given a filename this will try to calculate the python path, add it
to the search path and return the actual module name that is expected.
@ -157,23 +180,7 @@ def locate_app(script_info, app_id):
match = re.match(function_regex, app_obj)
try:
if match:
function_name = match.group(1)
arguments = match.group(2)
if arguments:
arguments = ast.literal_eval(
"({arguments}, )".format(arguments=arguments))
else:
arguments = ()
app_factory = getattr(mod, function_name, None)
app_factory_arg_names = getargspec(app_factory).args
if 'script_info' in app_factory_arg_names:
app = app_factory(*arguments, script_info=script_info)
elif arguments:
app = app_factory(*arguments)
elif not arguments and len(app_factory_arg_names) == 1:
app = app_factory(script_info)
else:
app = app_factory()
app = call_factory_from_regex(match, mod, script_info)
else:
attr = getattr(mod, app_obj, None)
if inspect.isfunction(attr):

Loading…
Cancel
Save