Skip to main content

Static file digest cache busting for FastAPI/Starlette

Project description

FastAPI Static Digest

A Starlette/FastAPI plugin to digest and compress static files, and integrate with Jinja templates.

pip install fastapi-static-digest

Overview

There are two classes: StaticDigest and StaticDigestCompiler.

The StaticDigestCompiler.compiler method will produce the digested directory. The StaticDigest (and starlette.staticfiles.StaticFiles) should be configured to read this directory.

The compilation can be added to your build process, for instance with a click CLI command (see below). Alternatively, the FASTAPI_STATICDIGEST_RELOAD=1 environment variable can be set to enable "hot reloading" during development.

Usage

# app.py

app_root = Path(__file__).parent
static_src =  app_root / "static"
static = StaticDigest(source_dir=static_src)

routes = [
    Mount('/static', app=StaticFiles(directory=static.directory), name="static"),
]

app = Starlette(routes=routes)
# manage.py

from .app import app_root


@click.command()
def compile():
    src = app_root / "static"
    click.echo("Source dir %s" % src)
    compiler = StaticDigestCompiler(source_directory=src)
    compiler.compile()
    click.echo("Done.")

Jinja2 Integration

# app.py

app_root = Path(__file__).parent
static_src =  app_root / "static"
static = StaticDigest(source_dir=static_src)
templates = Jinja2Templates(app_root / "templates")
static.register_static_url_for(templates)

routes = [
    Mount('/static', app=StaticFiles(directory=static.directory), name="static"),
]

app = Starlette(routes=routes)
<!-- index.html -->
{{ static_url_for("static", "app.css" )}}

renders to

https://myhost.com/static/app.92fede82119d2e012f890e1102080a45.css

Development

PRs and issues are welcome!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fastapi-static-digest-1.1.0.tar.gz (5.1 kB view hashes)

Uploaded Source

Built Distribution

fastapi_static_digest-1.1.0-py3-none-any.whl (6.4 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page