カスタムコマンドラインコマンド#
アプリは quart コマンドをカスタマイズして機能を追加できます。最も一般的な使用例はデータベース初期化コマンドを追加することです。
import click
@app.cli.command()
def initdb():
click.echo('Database is migrating')
...
次に示すように機能します。
$ quart initdb
Database is migrating
注意
Flask とは異なり、Quart コマンドはアプリコンテキスト内で実行されません。click コマンドは非同期ではなく同期だからです。
非同期使用#
カスタムコマンドで非同期コードを使用する最善の方法は、イベントループを作成して手動で実行することです。たとえば、次のようになります。
import asyncio
@app.cli.command()
def fetch_db_data():
result = asyncio.get_event_loop().run_until_complete(_fetch())
async def _fetch():
return await db.execute(...)
拡張機能や別のモジュールに CLI コマンドを含める#
Quart 拡張機能やブループリントに CLI コマンドを含めるには、「run」ファクトリ関数でメソッドを登録します。
from quart import Quart
from my_extension import my_cli
def create_app():
app = Quart(__name__)
app = my_cli(app)
return app
モジュールまたは拡張機能には次のようにします。
import click
def my_cli(app):
# @click.option("--my-option")
@app.cli.command("mycli")
def my_cli_command():
print("quart ran this command")
return app
以下を実行できます。
$ quart mycli
$ quart ran this command