• Stars
    star
    114
  • Rank 306,292 (Top 7 %)
  • Language
    Python
  • License
    MIT License
  • Created about 6 years ago
  • Updated 5 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Compress responses of your Flask application.

Flask-Compress

Build Version Downloads

Flask-Compress allows you to easily compress your Flask application's responses with gzip, deflate or brotli. It originally started as a fork of Flask-gzip.

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

Cache example

Flask-Compress can be integrated with caching mechanisms to serve compressed responses directly from the cache. This can significantly reduce server load and response times.
Here is an example of how to configure Flask-Compress with caching using Flask-Caching.
The example demonstrates how to create a simple cache instance with a 1-hour timeout, and use it to cache compressed responses for incoming requests.

# Initializing flask app
app = Flask(__name__)

cache = Cache(app, config={
    'CACHE_TYPE': 'simple',
    'CACHE_DEFAULT_TIMEOUT': 60*60  # 1 hour cache timeout
})

# Define a function to return cache key for incoming requests
def get_cache_key(request):
    return request.url

# Initialize Flask-Compress
compress = Compress()
compress.init_app(app)

# Set up cache for compressed responses
compress.cache = cache
compress.cache_key = get_cache_key

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. [
'application/javascript',
'application/json',
'text/css',
'text/html',
'text/javascript',
'text/xml',
]
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']
COMPRESS_STREAMS Compress content streams. True

More Repositories

1

colour

Colour Science for Python
Python
2,025
star
2

colour-demosaicing

CFA (Colour Filter Array) demosaicing algorithms for Python
Jupyter Notebook
270
star
3

awesome-colour

Curated list of awesome colour science resources 😎
Python
258
star
4

colour-checker-detection

Colour checker detection with Python
Jupyter Notebook
211
star
5

colour-nuke

Colour - Nuke
Jupyter Notebook
196
star
6

colour-science-precis

Colour Science Precis for the CGI Artist
HTML
143
star
7

colour-hdri

HDRI / Radiance image processing algorithms for Python
Jupyter Notebook
131
star
8

colour-datasets

Colour science datasets for use with Colour
Python
54
star
9

colour-analysis

Image analysis tools based on Colour and Vispy
Python
41
star
10

colour-visuals

WebGPU-based visuals for colour science applications
Python
30
star
11

MunsellAndKubelkaMunkToolbox

The Munsell and Kubelka-Munk Toolbox
M
26
star
12

gamut-mapping-ramblings

Gamut Mapping Ramblings
Jupyter Notebook
25
star
13

colour-notebooks

Colour - Jupyter Notebooks
Jupyter Notebook
22
star
14

colour-analysis-three.js

Image analysis tools based on Colour and Three.js
JavaScript
20
star
15

colour-unity

Colour science resources for use with Unity.
Jupyter Notebook
15
star
16

aces-retrospective-and-enhancements

ACES - Retrospective and Enhancements
TeX
14
star
17

smits1999

An RGB to Spectrum Conversion for Reflectances - Smits (1999)
MATLAB
12
star
18

GSoC

Google Summary of Code - Colour Science for Python
12
star
19

colour-science.org

https://www.colour-science.org
HTML
10
star
20

PGMA_v2.1

Public Gamut Mapping Algorithm (PGMA) C Source Code - Morovic (2001)
C
8
star
21

colour-maya

Colour - Maya
Python
8
star
22

colour-mitsuba

Various resources for Mitsuba 3
Python
7
star
23

alshaders

C++
6
star
24

colour-spectroscope

Colour - Spectroscope
Python
6
star
25

colour-demosaicing-examples-datasets

Colour - Demosaicing - Examples Datasets
5
star
26

colour-ocean

Various resources for Eclat Digital - Ocean Light Simulator
Python
5
star
27

colour-dash

Various colour science Dash apps built on top of Colour
Python
4
star
28

cinematiccolor-ramblings

HTML
4
star
29

colour-substance

Colour - Substance
4
star
30

colour-specio

Python
4
star
31

colour-ramblings

Colour Ramblings
Jupyter Notebook
4
star
32

colour-branding

Colour - Branding
Python
3
star
33

prysm

A Python optics module
Python
3
star
34

colour-vagrant

Colour - Vagrant Environment
3
star
35

colour-demosaicing-tests-datasets

Colour - Demosaicing - Tests Datasets
2
star
36

colour-benchmarks

Python
2
star
37

colour-hdri-examples-datasets

Colour - HDRI - Examples Datasets
2
star
38

colour-webhook

Various "webhook" resources for use with https://www.colour-science.org.
Python
1
star
39

colour-auto

Automatic colour conversion tool for Colour .
Python
1
star
40

colour-playground

A repository leveraging Binder to play with Colour.
Jupyter Notebook
1
star
41

colour-website

Colour - Website
HTML
1
star
42

artifacts

1
star
43

colour-hdri-tests-datasets

Colour - HDRI - Tests Datasets
1
star
44

colour-science.devcontainer

VSCode devcontainer for colour-science development
Dockerfile
1
star
45

colour-checker-detection-examples-datasets

Colour - Checker Detection - Examples Datasets
1
star
46

colour-checker-detection-tests-datasets

Colour - Checker Detection - Tests Datasets
1
star