Skip to main content

Compress responses in your Flask app with gzip, deflate or brotli.

Project description

Flask-Compress

Version Build Status Coverage License

Flask-Compress allows you to easily compress your Flask application's responses with gzip, deflate or brotli.

The preferred solution is to have a server (like Nginx) automatically compress the static files for you. If you don't have that option Flask-Compress will solve the problem for you.

How it works

Flask-Compress both adds the various headers required for a compressed response and compresses the response data. This makes serving compressed static files extremely easy.

Internally, every time a request is made the extension will check if it matches one of the compressible MIME types and whether the client and the server use some common compression algorithm, and will automatically attach the appropriate headers.

To determine the compression algorithm, the Accept-Encoding request header is inspected, respecting the quality factor as described in MDN docs. If no requested compression algorithm is supported by the server, we don't compress the response. If, on the other hand, multiple suitable algorithms are found and are requested with the same quality factor, we choose the first one defined in the COMPRESS_ALGORITHM option (see below).

Installation

If you use pip then installation is simply:

$ pip install --user flask-compress

or, if you want the latest github version:

$ pip install --user git+git://github.com/colour-science/flask-compress.git

You can also install Flask-Compress via Easy Install:

$ easy_install flask-compress

Using Flask-Compress

Globally

Flask-Compress is incredibly simple to use. In order to start compressing your Flask application's assets, the first thing to do is let Flask-Compress know about your flask.Flask application object.

from flask import Flask
from flask_compress import Compress

app = Flask(__name__)
Compress(app)

In many cases, however, one cannot expect a Flask instance to be ready at import time, and a common pattern is to return a Flask instance from within a function only after other configuration details have been taken care of. In these cases, Flask-Compress provides a simple function, flask_compress.Compress.init_app, which takes your application as an argument.

from flask import Flask
from flask_compress import Compress

compress = Compress()

def start_app():
    app = Flask(__name__)
    compress.init_app(app)
    return app

In terms of automatically compressing your assets, passing your flask.Flask object to the flask_compress.Compress object is all that needs to be done.

Per-view compression

Compression is possible per view using the @compress.compressed() decorator. Make sure to disable global compression first.

from flask import Flask
from flask_compress import Compress

app = Flask(__name__)
app.config["COMPRESS_REGISTER"] = False  # disable default compression of all eligible requests
compress = Compress()
compress.init_app(app)

# Compress this view specifically
@app.route("/test")
@compress.compressed()
def view():
   pass

Options

Within your Flask application's settings you can provide the following settings to control the behavior of Flask-Compress. None of the settings are required.

Option Description Default
COMPRESS_MIMETYPES Set the list of mimetypes to compress here. [
'text/html',
'text/css',
'text/xml',
'application/json',
'application/javascript'
]
COMPRESS_LEVEL Specifies the gzip compression level. 6
COMPRESS_BR_LEVEL Specifies the Brotli compression level. Ranges from 0 to 11. 4
COMPRESS_BR_MODE For Brotli, the compression mode. The options are 0, 1, or 2. These correspond to "generic", "text" (for UTF-8 input), and "font" (for WOFF 2.0). 0
COMPRESS_BR_WINDOW For Brotli, this specifies the base-2 logarithm of the sliding window size. Ranges from 10 to 24. 22
COMPRESS_BR_BLOCK For Brotli, this provides the base-2 logarithm of the maximum input block size. If zero is provided, value will be determined based on the quality. Ranges from 16 to 24. 0
COMPRESS_DEFLATE_LEVEL Specifies the deflate compression level. -1
COMPRESS_MIN_SIZE Specifies the minimum file size threshold for compressing files. 500
COMPRESS_CACHE_KEY Specifies the cache key method for lookup/storage of response data. None
COMPRESS_CACHE_BACKEND Specified the backend for storing the cached response data. None
COMPRESS_REGISTER Specifies if compression should be automatically registered. True
COMPRESS_ALGORITHM Supported compression algorithms. ['br', 'gzip', 'deflate']

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-Compress-1.9.0.tar.gz (10.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

Flask_Compress-1.9.0-py3-none-any.whl (7.3 kB view details)

Uploaded Python 3

File details

Details for the file Flask-Compress-1.9.0.tar.gz.

File metadata

  • Download URL: Flask-Compress-1.9.0.tar.gz
  • Upload date:
  • Size: 10.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.23.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/2.7.18

File hashes

Hashes for Flask-Compress-1.9.0.tar.gz
Algorithm Hash digest
SHA256 d93edd8fc02ae74b73c3df10a8e7ee26dee489c65dedce0b3a1d2ce05ac3d1be
MD5 f9a17516db8a2e6a3c22eeb2b0058051
BLAKE2b-256 da4d20eccc60b10f8765f15f42db35e1a0d010bc9a7562760410f7d9cef87d77

See more details on using hashes here.

File details

Details for the file Flask_Compress-1.9.0-py3-none-any.whl.

File metadata

  • Download URL: Flask_Compress-1.9.0-py3-none-any.whl
  • Upload date:
  • Size: 7.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/3.7.3 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.6.8

File hashes

Hashes for Flask_Compress-1.9.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6dc80e18b0304ff3155461fb4b155eb8be3e929e6f7bbdd90c723e1c554e2368
MD5 b5d258d835a608b398d84247a86167e8
BLAKE2b-256 c6d569b13600230d24310b98a52da561113fc01a5c17acf77152761eef3e50f1

See more details on using hashes here.

Supported by

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