Custom Command Line Commands¶
quart command can be customised by the app to add additional
functionality. A very typical use case is to add a database
import click @app.cli.command() def initdb(): click.echo('Database is migrating') ...
which will then work as,
$ quart initdb Database is migrating
Unlike Flask the Quart commands do not run within an app context, as click commands are synchronous rather than asynchronous.
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