cli loader handles kwargs in app factory

This commit is contained in:
na2shell 2021-06-25 11:39:13 +09:00 committed by David Lord
parent c3f923d0e0
commit 9f0da9b770
No known key found for this signature in database
GPG Key ID: 7A1C87E3F5BC42A8
3 changed files with 26 additions and 12 deletions

View File

@ -19,6 +19,8 @@ Unreleased
:issue:`4157` :issue:`4157`
- Correctly handle raising deferred errors in CLI lazy loading. - Correctly handle raising deferred errors in CLI lazy loading.
:issue:`4096` :issue:`4096`
- The CLI loader handles ``**kwargs`` in a ``create_app`` function.
:issue:`4170`
Version 2.0.1 Version 2.0.1

View File

@ -103,18 +103,21 @@ def call_factory(script_info, app_factory, args=None, kwargs=None):
) )
kwargs["script_info"] = script_info kwargs["script_info"] = script_info
if ( if not args and len(sig.parameters) == 1:
not args first_parameter = next(iter(sig.parameters.values()))
and len(sig.parameters) == 1
and next(iter(sig.parameters.values())).default is inspect.Parameter.empty if (
): first_parameter.default is inspect.Parameter.empty
warnings.warn( # **kwargs is reported as an empty default, ignore it
"Script info is deprecated and will not be passed as the" and first_parameter.kind is not inspect.Parameter.VAR_KEYWORD
" single argument to the app factory function in Flask" ):
" 2.1.", warnings.warn(
DeprecationWarning, "Script info is deprecated and will not be passed as the"
) " single argument to the app factory function in Flask"
args.append(script_info) " 2.1.",
DeprecationWarning,
)
args.append(script_info)
return app_factory(*args, **kwargs) return app_factory(*args, **kwargs)

View File

@ -74,6 +74,15 @@ def test_find_best_app(test_apps):
assert isinstance(app, Flask) assert isinstance(app, Flask)
assert app.name == "appname" assert app.name == "appname"
class Module:
@staticmethod
def create_app(**kwargs):
return Flask("appname")
app = find_best_app(script_info, Module)
assert isinstance(app, Flask)
assert app.name == "appname"
class Module: class Module:
@staticmethod @staticmethod
def create_app(foo): def create_app(foo):