カスタムコマンドラインコマンド#

アプリは 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