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