Skip to main content

Flask extension for fingerprinting static assets

Project description

Flask-Fingerprint

License PyPI Build

This project is a lightweight Flask extension for cache-busting static assets via file hash or query parameter.

Installation

It's available from PyPi using pip:

pip install Flask-Fingerprint

Getting started

Using this library is straightforward:

from flask_fingerprint import Fingerprint

# Configuration
config = {
    'manifest': 'path/to/manifest.json',
    'extensions': ['js', 'css', 'jpg'],
    'hash_size': 12,
    'query': False,
}

# Option 1
Fingerprint(app, config)

# Option 2
ext = Fingerprint(config=config)
ext.init_app(app)

After that, url_for takes care of cache-busting your static assets auto-magically:

<!-- When enabled, this .. -->
<script src="{{ url_for('static', filename='js/main.js') }}"></script>

<!-- .. becomes this .. -->
<script src="/<static-folder>/js/main.f1l3h4sh.js"></script>

Unless passing a manifest file (as created by third-party tools like gulp-rev) or using query mode (see section 'Configuration'), you need to implement server rules to make this work.

Apache

Place the following snippet inside your .htaccess, right after RewriteBase:

# RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)\.([0-9a-z]{8})\.(js|css)$ $1.$3 [L]

Note: The {8} part has to match your hash_size (see section 'Configuration').

NGINX

Place the following snippet anywhere inside your virtual host setup:

location ~ (.+)\.(?:\w+)\.(js|css)$ {
    try_files $uri $1.$2;
}

Usage

__init__(app: Flask = None, config: dict = None)

Creates Fingerprint instance.

init_app(app: Flask, config: dict)

See __init__ above.

Note: flask_fingerprint also exposes a logger instance which might prove useful when debugging!

Configuration

When passing a config object (like in the example above), you may use the following options:

manifest: str:

Manifest file, mapping unbusted filenames & their busted revisions. Default: <static_folder>/manifest.json

extensions: list | str:

Allowed extensions. Default: ['css', 'js']

hash_size: int:

Length of file hash. Default: 8

query: bool:

Use query parameter instead of file hash. Default: False

Credits

This extension was inspired by other solutions for cache-busting assets in Flask applications.

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

Flask-Fingerprint-0.1.0.tar.gz (5.8 kB view details)

Uploaded Source

Built Distribution

Flask_Fingerprint-0.1.0-py3-none-any.whl (6.2 kB view details)

Uploaded Python 3

File details

Details for the file Flask-Fingerprint-0.1.0.tar.gz.

File metadata

  • Download URL: Flask-Fingerprint-0.1.0.tar.gz
  • Upload date:
  • Size: 5.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.0.1 pkginfo/1.4.2 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.9.7

File hashes

Hashes for Flask-Fingerprint-0.1.0.tar.gz
Algorithm Hash digest
SHA256 0acc9451b1c7202eded0374cc13eccd7d29e93aa6ca9e9c88a1f9a63ad296927
MD5 16297a2cd9419ecab65df296476d81a6
BLAKE2b-256 6d056416638edf0144500be03875ad39eaba574b899cb33373b46ce5c6a668a3

See more details on using hashes here.

File details

Details for the file Flask_Fingerprint-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: Flask_Fingerprint-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 6.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.0.1 pkginfo/1.4.2 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.9.7

File hashes

Hashes for Flask_Fingerprint-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8d86a44f4887d0511eb78d992e6724a172807df20f6aa1c63e242ed63c34f6df
MD5 dd4b69b5cf0457e001129030b7b02645
BLAKE2b-256 c40874e6fc6352c24af02defb792c6f4129d3d0540be53e03345e1ebcd0dfd0e

See more details on using hashes here.

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