Custom Command Line Commands¶
The quart
command can be customised by the app to add additional
functionality. A very typical use case is to add a database
initialisation command,
import click
@app.cli.command()
def initdb():
click.echo('Database is migrating')
...
which will then work as,
$ quart initdb
Database is migrating
Note
Unlike Flask the Quart commands do not run within an app context, as click commands are synchronous rather than asynchronous.
Asynchronous usage¶
The best way to use some asynchronous code in a custom command is to create an event loop and run it manually, for example,
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(...)
Including a CLI Command in an extension or another module¶
To include CLI commands in a Quart extension or blueprint, register the methods in the “run” factory function
from quart import Quart
from my_extension import my_cli
def create_app():
app = Quart(__name__)
app = my_cli(app)
return app
And in your module or extension:
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
This can be run with:
$ quart mycli
$ quart ran this command