--help flag does not work with QUART_APP envvar and create_app factory

オープン 初心者向け
#483 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
2/5
見積もり時間
1〜3時間
初心者へのやさしさ
76/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
python
領域
backend, cli

調査の方向性

まず quart/cli.py にある Quart CLI のアプリ読み込み経路を読み、特に QUART_APP の読み込み方法と最上位の --help オプションの処理を確認してください。QUART_APP で選択した create_app ファクトリーを使って再現し、--app の場合と比較してください。QUART_APP=run quart --help がインポートエラーなしでヘルプを表示し、報告されているサブコマンドが引き続き動作すれば完了です。

索引モデルが issue の本文から書いたものです。

説明

When using a create_app() factory function, the --help flag does not work with QUART_APP envvar but does work with --app flag. All other quart subcommands work such as 'run'.

Minimal example

Layout

.
├── init.py
├── run.py
└── server.py

server.py
from quart import Quart

def create_app(mode='Development'):
    app = Quart(__name__)
    print("hello from create_app")
    return app
run.py
from .server import create_app

def main():
    app = create_app()
    app.run()


if __name__ == "__main__":
    app.run()

Expected behaviour

% quart --app=run --help
hello from create_app
Usage: quart [OPTIONS] COMMAND [ARGS]...

  A general utility script for Quart applications. An application to load must
  be given with the '--app' option, 'QUART_APP' environment variable, or with
  an 'app.py' file in the current directory.

Options:
  -e, --env-file FILE   Load environment variables from this file. python-
                        dotenv must be installed.
  -A, --app IMPORT      The QUART application or factory function to load, in
                        the form 'module:name'. Module can be a dotted import
                        or file path. Name is not required if it is 'app',
                        'application', 'create_app', or 'make_app', and can be
                        'name(args)' to pass arguments.
  --debug / --no-debug  Set 'app.debug' separately from '--env'.
  --version             Show the Quart version
  --help                Show this message and exit.

Commands:
  routes  Show the routes for the app.
  run     Run a development server.
  shell   Run a shell in the app context.

% quart --app=run run       
hello from create_app
 * Serving Quart app 'quarttest.server'
 * Debug mode: False
 * Please use an ASGI server (e.g. Hypercorn) directly in production
 * Running on http://127.0.0.1:5000 (CTRL + C to quit)
Incorrect behaviour
% QUART_APP=run quart --help
Error: While importing 'quarttest.app', an ImportError was raised:

Traceback (most recent call last):
  File "/Users/erikmelander/kod/quarttest/venv/lib/python3.11/site-packages/quart/cli.py", line 186, in locate_app
    module = import_module(module_name)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Cellar/[email protected]/3.11.4_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1140, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'quarttest.app'


Usage: quart [OPTIONS] COMMAND [ARGS]...

  A general utility script for Quart applications. An application to load must
  be given with the '--app' option, 'QUART_APP' environment variable, or with
  an 'app.py' file in the current directory.

Options:
  -e, --env-file FILE   Load environment variables from this file. python-
                        dotenv must be installed.
  -A, --app IMPORT      The QUART application or factory function to load, in
                        the form 'module:name'. Module can be a dotted import
                        or file path. Name is not required if it is 'app',
                        'application', 'create_app', or 'make_app', and can be
                        'name(args)' to pass arguments.
  --debug / --no-debug  Set 'app.debug' separately from '--env'.
  --version             Show the Quart version
  --help                Show this message and exit.

Commands:
  routes  Show the routes for the app.
  run     Run a development server.
  shell   Run a shell in the app context.

% QUART_APP=run quart run   
hello from create_app
 * Serving Quart app 'quarttest.server'
 * Debug mode: False
 * Please use an ASGI server (e.g. Hypercorn) directly in production
 * Running on http://127.0.0.1:5000 (CTRL + C to quit)

Environment:

  • Python version: 3.11
  • Quart version: 0.22.0
主要言語
Python
スター
3.7k
フォーク
209
PR マージ指標
30日以内にマージされた PR はありません

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

pallets/quart のほかの issue

pallets/quart の issue をすべて見る

似ている issue

Python の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。