Skip to content

CLI API

This page documents the command-line interface functions and classes.

CLI Commands

The CLI commands are implemented as Click commands that integrate with Quart's CLI system.

assets

quart_assets.extension.assets()

Quart Assets commands.

Source code in src/quart_assets/extension.py
387
388
389
@click.group()
def assets() -> None:
    """Quart Assets commands."""

build

quart_assets.extension.build(info)

Build bundles.

Source code in src/quart_assets/extension.py
392
393
394
395
396
@assets.command()
@pass_script_info
def build(info: ScriptInfo) -> None:
    """Build bundles."""
    _webassets_cmd("build", info)

clean

quart_assets.extension.clean(info)

Clean bundles.

Source code in src/quart_assets/extension.py
399
400
401
402
403
@assets.command()
@pass_script_info
def clean(info: ScriptInfo) -> None:
    """Clean bundles."""
    _webassets_cmd("clean", info)

watch

quart_assets.extension.watch(info)

Watch bundles for file changes.

Source code in src/quart_assets/extension.py
406
407
408
409
410
@assets.command()
@pass_script_info
def watch(info: ScriptInfo) -> None:
    """Watch bundles for file changes."""
    _webassets_cmd("watch", info)

Helper Functions

_webassets_cmd

quart_assets.extension._webassets_cmd(cmd, info)

Helper to run a webassets command.

Source code in src/quart_assets/extension.py
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
def _webassets_cmd(cmd: str, info: ScriptInfo) -> None:
    """Helper to run a webassets command."""
    app = info.load_app()

    if not hasattr(app.jinja_env, "assets_environment"):
        raise RuntimeError(
            "No assets environment found. Make sure you've "
            + "initialized QuartAssets with your app."
        )

    logger = logging.getLogger("webassets")
    if not logger.handlers:
        logger.addHandler(logging.StreamHandler())
    logger.setLevel(logging.DEBUG)

    async def _run_with_app_context() -> None:
        async with app.app_context():  # ty: ignore[invalid-context-manager]
            cmdenv = CommandLineEnvironment(
                app.jinja_env.assets_environment,  # ty: ignore[unresolved-attribute]
                logger,
            )
            getattr(cmdenv, cmd)()

    asyncio.run(_run_with_app_context())

Usage Examples

Basic Command Usage

# Show help for all asset commands
python -m quart assets --help

# Build all asset bundles
python -m quart assets build

# Clean generated assets
python -m quart assets clean

# Watch for changes and rebuild automatically
python -m quart assets watch

Environment Configuration

# Set the Quart application
export QUART_APP=myapp.py

# Set environment
export QUART_ENV=production

# Run commands
python -m quart assets build

Application Factory

# For application factory pattern
export QUART_APP="myapp:create_app"
python -m quart assets build

Programmatic Usage

While the CLI commands are typically used from the command line, you can also access the underlying functionality programmatically:

from quart_assets.extension import _webassets_cmd
from quart.cli import ScriptInfo

# Create script info (normally done by Quart CLI)
info = ScriptInfo(name='myapp')

# Run commands programmatically
_webassets_cmd('build', info)
_webassets_cmd('clean', info)

Error Handling

The CLI commands include error handling for common issues:

  • Application not found: Ensures QUART_APP is set correctly
  • Assets environment missing: Verifies QuartAssets is initialized
  • File permission errors: Provides clear error messages
  • Import errors: Handles missing dependencies gracefully

Integration

CI/CD Pipelines

Example usage in continuous integration:

# .github/workflows/build.yml
- name: Build assets
  run: python -m quart assets build
  env:
    QUART_APP: myapp.py
    QUART_ENV: production

Docker

Example Dockerfile integration:

# Build assets during image build
RUN QUART_APP=myapp.py python -m quart assets build

# Or build at runtime
CMD ["sh", "-c", "python -m quart assets build && python -m quart run"]

Development Scripts

Example development script:

#!/bin/bash
# dev.sh

export QUART_APP=myapp.py
export QUART_ENV=development

# Build assets
python -m quart assets build

# Start development server
python -m quart run --debug

Next Steps